MySQL替代联盟?

时间:2016-07-19 11:30:48

标签: mysql

我试图考虑使用替代方法而不是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");

1 个答案:

答案 0 :(得分:0)

如果每个查询的金额不同LIMIT,您可以将它们合并为使用OR的单个查询。要为每个child.handleparent.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条件的查询。