-1

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

信息:为天际制作数据库

  • 表名:职业、能力、技能、呼喊
  • 列名:名称、信息

这是到目前为止我所拥有的代码片段:

$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());`

从字面上看,我认为我需要做的就是在新raw_results的代码行中将表名从“shouts”更改为“classes”,但这不起作用。我尝试过联合和连接,要么继续搞砸它们,要么就是不明白如何正确格式化它们。

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

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

4

1 回答 1

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_*函数!

于 2013-03-09T18:03:17.527 回答