0

我正在构建 php 搜索框,这是我的查询

SELECT * FROM table1, table2 WHERE table1.title AND table2.posts LIKE '$query%' LIMIT 10

查询后的代码是

if($query) {
while ($result = $query ->fetch_object()) {
echo '<li onClick="window.open(\''.$result->guid.'\');">'.$result->post_title.'</li><br>';
            }
        } else {
            echo 'ERROR: There was a problem with the query.';
        }

它不获取任何东西。我认为这是来自查询的内容。请帮忙..

4

5 回答 5

3

将您的查询更改为:

SELECT * FROM table1, table2 WHERE table1.title LIKE '$query%' 
AND table2.posts LIKE '$query%' LIMIT 10
于 2013-06-16T14:57:10.953 回答
2

您不能像您尝试的那样加入条件,每个连接词都需要有自己的语句

SELECT * FROM table1, table2 WHERE table1.title LIKE '$query%' AND table2.posts LIKE '$query%' LIMIT 10
于 2013-06-16T14:57:11.513 回答
1
$result = $query->query("SELECT * FROM `table1` AS `t1` JOIN `table2` AS `t2` ON `t1`.`id` = `t2`.`t1id` WHERE `t1`.`title` LIKE '%" . $query . "%' AND `t2`.`posts` LIKE '%" . $query . "%' LIMIT 10;");

if($result ) {
  while ($result = $query->fetch_object()) {
    echo '<li onClick="window.open(\'' . $result->guid . '\');">' . $result->post_title . '</li><br>';
  }
}
else
  echo 'ERROR: There was a problem with the query.';

我认为它应该看起来像这样。

您应该使用 join 并有一个字段来连接两个表,如下所示:t1. id= t2t1id

如果需要,您可以使用table1table2但最好使用 JOIN。

使用 LIKE 时要注意的一件事是,最好在前后使用百分比,如下所示:LIKE '%" . $query . "%

于 2013-06-16T15:03:43.927 回答
0

Suhail Patel 是正确的,但可能并不完整。

根据您的表定义 SELECT * FROM table1, table2 WHERE table1.name LIKE x AND table2.name LIKE y;

将返回从每个表中选择的字段的所有可能组合。所以如果 table1 包含以下满足 LIKE 的行:

1
2
3

并且 table2 包含这些满足 LIKE 的行:

6
7
8

那么您的结果将包含 3x3 = 9 个答案:

1, 6
1, 7
1, 8
2, 6
2, 7
2, 8
3, 6
3, 7
3, 8

为避免这种情况,您必须定义两个表之间的关系。例如:

SELECT * FROM table1, table2 WHERE table1.name LIKE x AND table2.name LIKE y AND table1.type = table2.id;

这也可以重写为 JOIN 语句。有关加入的更多信息,此链接应该会有所帮助: http: //www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html

于 2013-06-16T15:07:02.033 回答
0

改变:

SELECT * FROM table1, table2 WHERE table1.title AND table2.posts LIKE '$query%' LIMIT 10

至:

SELECT * FROM table1, table2 WHERE table1.title LIKE '$query%' AND table2.posts LIKE '$query%' LIMIT 10

或您希望标题的任何变量

于 2013-06-16T15:00:59.903 回答