我试图考虑使用替代方法而不是UNION
。
我有20个这样的查询,我打算通过UNION
连接,以防止多个mysql连接。
$data = $DB2->query("SELECT parent.*,link.tag_ID as tag_ID FROM items parent
JOIN relations link on link.item_ID=parent.ID
JOIN tags child on child.ID=link.tag_ID
WHERE child.handle='$handle' LIMIT ".$limit.",1");
有没有另外一种方法来简化完整查询,或者UNION
是最好的方法,而不是执行此查询20次并通过UNION
连接它们?对于每个选择查询,handle
和$limit
都是动态的。
我如何解决?
或者,而不是使用LIMIT
$data = $DB2->query("SELECT parent.*,link.tag_ID as tag_ID FROM items parent
JOIN relations link on link.item_ID=parent.ID
JOIN tags child on child.ID=link.tag_ID
WHERE child.handle='$handle' AND parent.`no`='$limit' LIMIT 1");
答案 0 :(得分:0)
如果每个查询的金额不同LIMIT
,您可以将它们合并为使用OR
的单个查询。要为每个child.handle
和parent.no
获取1个值,您可以使用GROUP BY
。
$data = $DB2->query("SELECT parent.*,link.tag_ID as tag_ID FROM items parent
JOIN relations link on link.item_ID=parent.ID
JOIN tags child on child.ID=link.tag_ID
WHERE (child.handle='$handle1' AND parent.`no`='$limit1')
OR (child.handle='$handle2' AND parent.`no`='$limit2')
OR (child.handle='$handle3' AND parent.`no`='$limit3')
OR (child.handle='$handle4' AND parent.`no`='$limit4')
...
GROUP BY child.handle, parent.no");
但是,这可能不比执行UNION
查询更好,因为MySQL不擅长优化OR
条件的查询。