2011-11-24 201 views
0

我一直有一个问题试图查询3个表和2与相同的字段。使用PHP和MySQL从两个不同的表中查询相同的字段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 for title并根据相同的关键字进行匹配。如何将TableB标题字段合并到查询中?

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

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

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

TIA

+0

请去阅读[PDO](http://php.net/PDO)和事先准备好的声明。并购买/窃取自己[SQL Antipatterns](http://pragprog.com/book/bksqla/sql-antipatterns)书。 –

+0

@tereško我得看看更多的SQL教程。我需要更多的帮助,而不是PHP。 thx –

回答

3

做一个联盟:

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."') 
+0

好吧,我认为工会必须在表格中有相同的列。我会试试看。 –

+0

噢,这是行不通的,因为TableB没有TableA所做的ID表。所以我不能做同样的查询。它们不是相同的表格。假设一张桌子是歌曲表格,另一张桌子是最喜欢的桌子。两者都有标题字段,可以有不同的数据。如果有一场比赛,我想让它显示歌曲名称或最喜欢的标题,或者有很多比赛。 –

+0

联合中的每个查询都必须具有相同数量的列,每个对应列的数据类型相同。其他一切都是有效的。 –

相关问题