我正在使用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);
答案 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并且标题与模式匹配的两个表中获取所有标题,则此查询看起来合理。