【问题标题】:search MySQL and show result from other table搜索 MySQL 并显示其他表的结果
【发布时间】:2016-05-12 09:09:08
【问题描述】:

我在 PHP 中为我的 MySQL 数据库创建了一个搜索功能。搜索有效,但我想以特殊方式显示结果。我正在使用卡片来显示表格,其中一些信息来自我搜索的表格(课程计划),而另一个信息来自另一个表格(图像)。原来的代码是这样的:

<?php
require_once("db_link.inc.php");

if(isset($_GET['search'])) {
    $search = $link->escape_string($_GET['search']);
    $query = $link->query("SELECT Subject, Level, Aim FROM LessonPlans WHERE Subject LIKE '%".$search."%' OR Level LIKE '%".$search."%' OR Aim LIKE '%".$search."%' AND Language='English'");

if($query->num_rows){
    while($r = $query->fetch_object()){

    echo '<div class="col s6 m4 l3">
            <div class="card">
                <div class="card-image waves-effect waves-block waves-light">
                    <img class="activator" src="../mlslp/assets/img/'. $r->Name-img .'" alt="'. $r->Alt-img .'">
                </div>
                <div class="card-content">
                    <span class="card-title activator grey-text text-darken-4 truncate tooltipped" data-position="bottom" data-delay="800" data-tooltip="'.$r->Subject.'">'.$r->Subject.'</span>
                    <p class="blue-text">'.$r->Level.'</p>
                </div>
                <div class="card-action">
                    <a href="lessonplan.php?Id='. $r->Id .'">Open Lesson Plan</a>
                </div>
                <div class="card-reveal">
                    <span class="card-title grey-text text-darken-4">'.$r->Subject.'<i class="material-icons right">close</i></span>
                    <p>'.$r->Aim.'</p>
                </div>
            </div>
        </div>';
        }
    } 
}
?>

我要使用的表格是:

LessonPlans
Id | ImageId | Subject | Level | Aim | Language

Image
ImageId | Name-img | Alt-img

因为它显示了来自课程计划的正确结果,但不显示不可搜索的信息。我知道它不会像这样工作,我已经尝试过使用UNIONJOIN 以及只有两个SELECT 查询。一旦我将Images 表添加到查询中,我就会收到以下错误消息:

Notice: Trying to get property of non-object in ...

据我了解,这是因为$query 在我添加另一个表时不是对象。我不明白我是如何解决这个问题的。必须有一种方法可以搜索一个表但显示来自两个表的结果。有谁知道如何做到这一点?

我需要什么查询以及如何全部显示?

【问题讨论】:

  • 你从哪里得到这个 $row["Name-img"] ?
  • 这是我要打印的来自Images 的内容。在我的“正常”显示中,我使用 $sql_result = $link-&gt;query("SELECT * FROM LessonPlans l, Images i WHERE l.ImageId=i.ImageId AND l.Language='English' ORDER BY l.Id DESC;") 和 `while ($row = mysqli_fetch_array($sql_result))`,然后使用 row["***"] 显示。所以我把它留在那里以强调它来自另一张桌子。
  • 我在所有地方都用正确的 $r->*** 更新了

标签: php mysql


【解决方案1】:

试试这个

SELECT * FROM LessonPlans AS L 
JOIN Image AS I 
ON L.ImageId=I.ImageId  
WHERE L.Subject 
LIKE '%".$search."%' 
OR L.Level LIKE '%".$search."%' 
OR L.Aim LIKE '%".$search."%' 
AND L.Language='English'

然后输出你通过 $r =$query->fetch_object() 得到输出,所以你必须使用 object 来获取像这样的值 $r->Subject

【讨论】:

  • 这并不能帮助我显示来自Images的任何内容
【解决方案2】:

这样试试

从 table1、table2 中选择 table1.firstname、table2.lastname 其中 table1.id = table2.id

【讨论】:

  • 这并不能解决从两个表显示的问题
最近更新 更多