我想基于搜索查询显示行。 但是,我有3个表,并且想要在所有3个表中搜索,如果某些内容是LIKE('%$ parameter%')参数。
这是我目前的代码:
SELECT a.Name as aName
, b.Name as bName
, c.Name as cName
FROM TableA a
, TableB b
, TableC c
WHERE a.Name LIKE '%$parameter%'
OR b.Name LIKE '%$parameter%'
OR c.Name LIKE '%$parameter%'
在PHP中,我执行以下操作:
if($row['aName'] != ""){ echo $row['aName']; }
if($row['bName'] != ""){ echo $row['bName']; }
if($row['cName'] != ""){ echo $row['cName']; }
但是这......只是抛弃了所有表中的每一行,即使它们甚至不匹配参数。
我在google或stackoverflow上找不到任何有用的东西。
请帮忙!
答案 0 :(得分:1)
没有任何加入表格的条件你只需要制作笛卡尔积(称为Cross Join
),所以你需要添加相互连接表的条件:
SELECT a.Name as aName
, b.Name as bName
, c.Name as cName
FROM TableA a
INNER JOIN TableB b
a.name = b.name /* they are should have the same data for matching OR if it's OK then you can use your "Primary Key Columns" for matching other tables*/
INNER JOIN TableC c
ON a.name = c.name
WHERE
a.Name LIKE '%$parameter%'
OR b.Name LIKE '%$parameter%'
OR c.Name LIKE '%$parameter%';
答案 1 :(得分:1)
你应该更新你的sql,这样它不会返回3列而是1列,它也会简化你的php:
SELECT a.Name as aName
FROM TableA a
WHERE a.Name LIKE '%$parameter%'
union
SELECT b.Name as bName
FROM TableB b
WHERE b.Name LIKE '%$parameter%'
union
SELECT c.Name as cName
FROM TableC c
WHERE c.Name LIKE '%$parameter%'
通过这种方式,您将只获得匹配的线条,您将在3个桌子之间避免不必要的完整笛卡尔积。