将db中的不同表查询与PHP结合并在一个页面上显示所有结果

时间:2013-03-09 17:45:40

标签: php mysql sql database

我一直在尝试创建一个有趣的数据库,以便更好地理解数据库,并使用PHP查询它们我正在搞乱的网站。当用户在PHP搜索框中输入搜索词时,我几乎有一个包含4个表的数据库,我的代码在数据库中搜索包含搜索词的任何条目。现在我可以轻松地获取我的代码来搜索单个表,但我似乎无法搜索所有4个表并在同一页面上显示结果。

info:为skyrim制作数据库

  • 表名:班级,权力,技能,呐喊
  • 列名:名称,信息

以下是我目前使用的代码片段:

$raw_results = mysql_query("
   SELECT *
   FROM   `xaviorin_skyrim`.`shouts` , `xaviorin_skyrim`.`classes`
   WHERE  (CONVERT(`UID` USING utf8) LIKE '%".$query."%' OR
          CONVERT(`Name` USING utf8) LIKE '%".$query."%' OR 
          CONVERT(`Information` USING utf8) LIKE '%".$query."%')
") or die(mysql_error());`

我认为我需要做的就是将表格名称从“shouts”更改为在新的raw_results代码行中说“类”但这不起作用。我已经尝试过工会和联接,要么继续搞砸它们,要么就是不理解如何正确地格式化它们。

echo "<p><h3>".$results['Name']."</h3>".$results['Information']."</p>";

本文上方的代码是在我的网站页面上显示结果...它可以工作,但我不知道如何将所有4个表中的信息组合成一个页面。如果我以错误的方式解决这个问题,任何人都可以指出我正确的方向,我会非常感激...我一直在努力研究这个问题而没有在近一个月内找到合适的答案。

1 个答案:

答案 0 :(得分:0)

您的方法存在的问题是,当来自两个不同表的多个查询结果时,关系数据库会执行交叉连接。所以基本上一个表中的每个匹配都将与第二个表中的每个匹配组合。如果第一个表中有3个条目,第二个表中有4个条目,则查询结果中将显示3 * 4 = 12个条目。如果添加更多表,则会获得更多结果。你想在几个完全不相关的表中进行全文搜索,因此通过交叉连接创建某种不存在的关系是没有用的。

您实际想要做的是几个查询的UNION ALLUNION速度较慢,因为它会修剪重复项):

SELECT name, information, 'shouts' AS tablename FROM shouts WHERE ...
UNION ALL
SELECT name, information, 'classes' AS tablename FROM classes WHERE ...

这将对每个表执行搜索查询,然后将结果放在单个结果中。另请注意,我为每个查询添加了第三列,以确保在合并结果后原始表不会丢失。

除非您之后需要进行一些排序,否则我建议您单独进行所有声明。以这种方式组合它们很可能使后处理更复杂。并且一些单个查询也会比使用UNION语句的一个大查询更快。

正如我在评论中提到的:不要使用mysql_*函数!