2014-03-05 142 views
0

我有一个MySQL查询,我试图同时搜索2个表。这是用于搜索常规客户和商业客户的自动完成搜索框。下面是代码:MySQL联盟丢失表名

$query = mysql_query("SELECT * FROM clients WHERE lastname LIKE '$q%' AND agentid = '$agentid' 
          UNION 
          SELECT * FROM busclients WHERE busname LIKE '$q%' AND agentid = '$agentid'")or die(mysql_error()); 
      if($query) { 
       while ($result = mysql_fetch_array($query)) { 
        $busname = $result['busname']; 
        print_r($result); 

        if(isset($busname)){ 

         $description['id'] = 'viewbusiness.php?id=' . $result['ID']; 
        $description['value'] = $busname ; 
        array_push($return_arr,$description); 
        } 
        else 
        { 

        $description['id'] = 'viewclient.php?id=' .$result['ID']; 
        $description['value'] = $result['lastname'] . ", " . $result['firstname'] ; 
        array_push($return_arr,$description); 
        } 

        } 
       } 

的问题是,企业客户会被分配在固定客户的表名,所以代码永远不会使用,如果(isset($ busname)),因为busname成为姓氏,而是和引导你进入veiwclient页面。

+0

您可能需要更改查询以使用JOIN,以便总线名称和姓氏在输出中是单独的字段。 –

+0

[MySQL连接在2个表上]可能的重复(http://stackoverflow.com/questions/22096814/mysql-join-on-2-tables) – DRapp

回答

0
SELECT 
    a.lastname , 
    b.busname 
FROM clients as a 
INNER JOIN 
    busclients as b 
    on b.agent_id = a.agent_id 
WHERE a.agent_id = $agent_id 
     AND (a.lastname LIKE '$q%' OR b.busname LIKE '$q%') 
+0

您的SQL语法错误;检查对应于你的MySQL服务器版本的手册,在第3行 – user1792107

+0

aah附近使用'AND(a.lastname LIKE'crea%'或b.busname LIKE'crea%')'在查询中...更新后的查询..请立即尝试。 –

+0

确实从客户端选择a.lastname,b.busname 作为内部连接busclients as b on busclients.agentid = clients.agentid 其中a.agentid ='$ agentid'AND(a.lastname LIKE'$ q%'OR b.busname LIKE'$ q%'),并在'on子句'中得到未知列'busclients.agentid',但agentid存在于两个表中。 – user1792107

0

通过专门选择您从表中所需的列名,并选择其他空字符串,我相信你可以得到你要寻找的方法是使用下面的结果:

SELECT firstname, lastname, '' AS busname FROM clients WHERE ... UNION SELECT '' AS firstname, '' AS lastname, busname FROM busclients WHERE ...