2014-02-28 64 views
0

我需要在2个同时表上进行搜索,我认为这个连接可以工作,但是它给了我一个不正确的语法错误。MySQL在2个表上加入

$return_arr = array(); 
    $query = mysql_query("SELECT * FROM clients WHERE lastname LIKE '$q%' AND agencyid = '$agencyid' 
          UNION 
          SELECT * FROM busclients WHERE busname LIKE '$q%' AND agencyid = '$agencyid'")or die(mysql_error()); 
      if($query) { 
       while ($result = mysql_fetch_array($query)) { 
        if(isset($result['busname'])){ 
         $description['id'] = $result['ID']; 
        $description['value'] = $result['busname'] ; 
        array_push($return_arr,$description); 
        } 
        else 
        { 
        $description['id'] = $result['ID']; 
        $description['value'] = $result['lastname'] . ", " . $result['firstname'] ; 
        array_push($return_arr,$description);  
        } 

        } 
       } 
echo json_encode($return_arr); 

与修复编辑下面建议和整个语法

这是一个自动完成搜索框中输入查询。所以当有人键入客户端或业务客户端名称时,它会使用此查询来搜索数据库,然后使用jquery显示结果。

下面的修复程序有效,但当我在业务客户端上搜索时,它正在返回[]。客户搜索工作正常。

+1

这是错误的:WHERE姓氏,总线名称 – Hackerman

+0

您能否提供样本数据和期望的结果?你的非工作查询并不能传达你真正想做的事情。 –

+0

在问题中描述你的'WHERE'子句应该做什么。 (正如@RobertRozas所述,你的WHERE子句是问题) – AgRizzo

回答

0

你可以使用两个单独查询的,并加入他们在一起,就像这样:

SELECT * FROM clients 
WHERE lastname LIKE "%agencyid%" 

UNION 

SELECT * FROM busclients 
WHERE busname LIKE "%$agencyid%"; 
+0

只有当两个表结构包含相同的列和数据类型时。 – DRapp

+0

这工作,但是当我在busclients上搜索时,它返回[]。当我在客户端上进行搜索时,它会正确返回。 – user1792107

0

您的SQL语法建议立即进行删除这个样子:

SELECT * FROM clients c 
inner join 
busclients b 
on c.agencyid=b.idbus 
WHERE (c.lastname and b.busname LIKE '$q%') AND c.agencyid = '$agencyid' 

只是为了完成圆请务必阅读this article上如何在mysql中加入表格

+0

我非常怀疑这一点。 'c.lastname'作为布尔表达式不太可能 – AgRizzo

+0

当我这样做时,它给了我一个错误,说明agencyid是不明确的? – user1792107

+0

这个查询我做了它盲!你需要把你的元数据放在你的问题中,所以我们可以更好的分析它! –