【问题标题】:Query same field from two different tables MYSQL从两个不同的表MYSQL查询相同的字段
【发布时间】:2011-11-24 00:23:53
【问题描述】:

我在尝试查询 3 个表和 2 个具有相同字段的表时遇到问题。使用php和mysql

例子

表A 表B 表C

查询中的关键字是搜索词。

SELECT 
   title 
FROM TableA as A 
LEFT JOIN TableC as C 
   ON TableA.id=TableC.id 
WHERE 1 
   AND TableC.private='0' 
   AND ( 
        title LIKE '".$keyword."%' 
     OR title LIKE '%".$keyword."%' 
     OR title LIKE '%".$keyword."' 
     OR title = '".$keyword."' 
   )

我遇到的问题是我还需要同时在 TableB 中搜索标题并根据相同的关键字进行匹配。如何将 TableB 标题字段合并到查询中?

因此,如果说 TableA 的 title=America 和 TableB 的 title=American 它将显示两个表的两个结果,因为它会匹配 LIKE 查询。

然后用 PHP 显示结果。如果 TableA 或 TableB 匹配显示该结果。并循环遍历数组等。

它必须在查询中,因为我将它用于搜索参数。

TIA

【问题讨论】:

  • 请阅读PDO 和准备好的声明。并购买/窃取自己SQL Antipatterns book。
  • @tereško 我将不得不查看更多 SQL 教程。我需要更多的帮助,而不是 PHP。谢谢

标签: php mysql sql


【解决方案1】:

做一个联合:

SELECT title FROM TableA as A LEFT JOIN TableC as C ON TableA.id=TableC.id WHERE 1 AND TABLEC.private='0' AND ( title LIKE '".$keyword."%' OR title LIKE '%".$keyword."%' 
             OR title LIKE '%".$keyword."' OR title = '".$keyword."' )
UNION
SELECT title FROM TableB as B LEFT JOIN TableC as C ON TableB.id=TableC.id WHERE 1 AND TABLEC.private='0' AND ( title LIKE '".$keyword."%' OR title LIKE '%".$keyword."%' 
             OR title LIKE '%".$keyword."' OR title = '".$keyword."' )

【讨论】:

  • 好的,我认为联合必须在表中具有相同的列。我试试看。
  • 哦,是的,这行不通,因为 TableB 没有 TableA 的 ID 表。所以我不能做同样的查询。它们不是相同的表。假设一张表是歌曲表,另一张表是收藏夹表。两者都有标题字段,并且可以有不同的数据。如果有匹配,我希望它显示歌曲标题或最喜欢的标题,或者有多少匹配。
  • 联合中的每个查询必须具有相同数量的列,并且每个对应列的数据类型相同。其他一切都有效。
  • 因此您必须根据需要修改 TableB 上的查询,但这应该仍然有效。
  • 谢谢,我认为做到了。我以前从未使用过工会,主要是加入,但这真的很有帮助。它得到了我需要的东西。太棒了。
猜你喜欢
  • 2013-12-23
  • 1970-01-01
  • 1970-01-01
  • 2021-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多