加入两个mysql查询?

时间:2014-03-13 19:35:25

标签: php mysql join union

我正在使用php创建搜索,我需要从公司名称公司类别搜索公司。

* company_content tb *

标题 category _id

* company_category tb *

标题(类别名称) ID parent_id(内容表上的类别ID)

这是我的查询

    $query=mysql_query("SELECT  b.title FROM  sltdb_cddir_content a, sltdb_cddir_categories b
WHERE  b.title like '%".$searchg."%' AND b.parent_id=81 UNION
SELECT  a.title  FROM  sltdb_cddir_content a, sltdb_cddir_categories b
WHERE a.categories_id=b.id  AND  a.title like '%".$searchg."%' AND b.parent_id=81");

这种类型的联合有效吗?请建议

更新01

   $query=mysql_query("SELECT  b.title
FROM sltdb_cddir_categories b
WHERE  b.title like '%".$searchg."%' AND b.parent_id = 81
UNION
SELECT  a.title
FROM  sltdb_cddir_content a join
      sltdb_cddir_categories b
      on a.categories_id = b.id
WHERE a.title like '%".$searchg."%' AND b.parent_id = 81");
$json=array();
while($display=mysql_fetch_array($query)){
    $json[]=array(
        'value'=> $display["title"],
        'label'=>$display["title"]
    );
}




echo json_encode($json);

2 个答案:

答案 0 :(得分:0)

我会去LEFT JOIN查询

SELECT a.title, b.title 
FROM  sltdb_cddir_content a 
LEFT JOIN sltdb_cddir_categories b
ON a.categories_id=b.id
WHERE  (b.title like '%".$searchg."%' OR a.title like '%".$searchg."%')
AND b.parent_id = 81

答案 1 :(得分:0)

这是您的查询:

SELECT  b.title
FROM  sltdb_cddir_content a, sltdb_cddir_categories b
WHERE  b.title like '%".$searchg."%' AND b.parent_id=81
UNION
SELECT  a.title
FROM  sltdb_cddir_content a, sltdb_cddir_categories b
WHERE a.categories_id=b.id  AND  a.title like '%".$searchg."%' AND b.parent_id=81;

在第一个子查询中,a的连接并不重要。永远不会使用这些值。这似乎是一个等价的查询:

SELECT  b.title
FROM sltdb_cddir_categories b
WHERE  b.title like '%".$searchg."%' AND b.parent_id = 81
UNION
SELECT  a.title
FROM  sltdb_cddir_content a join
      sltdb_cddir_categories b
      on a.categories_id = b.id
WHERE a.title like '%".$searchg."%' AND b.parent_id = 81;

如果目的是从相应的parent_id为81并且标题与模式匹配的两个表中获取所有标题,则此查询看起来合理。