Mysql 具有union和order by的sql语句
这个SQL工作得很好,但一旦我想使用Mysql 具有union和order by的sql语句,mysql,sql,Mysql,Sql,这个SQL工作得很好,但一旦我想使用orderbyid对我的选择进行排序,它就不起作用了。所有这些表都有一个idtypeint $sth = $this->db->prepare("SELECT r1, r2, r3, r4 FROM table1 WHERE name LIKE '%{$key}%' AND status = 1 LIMIT 0,20 UNION SELECT r1, r2, r3, r4 FROM table
orderbyid
对我的选择进行排序,它就不起作用了。所有这些表都有一个id
typeint
$sth = $this->db->prepare("SELECT r1, r2, r3, r4
FROM table1
WHERE name LIKE '%{$key}%' AND status = 1 LIMIT 0,20
UNION
SELECT r1, r2, r3, r4 FROM table2
WHERE name LIKE '%{$key}%' AND status = 1 LIMIT 0,20
UNION
SELECT r1, r2, r3, r4 FROM table3
WHERE name LIKE '%{$key}%' AND status = 1 LIMIT 0,20
UNION
SELECT r1, r2, r3, r4 FROM table4
WHERE name LIKE '%{$key}%' AND status = 1 LIMIT 0,20 ");
$sth->execute();
$data = $sth->fetchAll();
- 必须在每个选择上包含
,以保持结构相等ID
- 然后将所有这些放在parethesis之间,并根据需要指定一个别名<代码>(a联合体b联合体c)作为别名
- 最后执行别名表上的
select
select*FROM alias ORDER BY ID
要在
联合
的组件中使用排序依据
,需要将子查询括在括号中。然后,您可以在末尾包含orderby
。因此,这种结构将起作用:
(SELECT id, r1, r2, r3, r4 FROM table1 WHERE name LIKE '%{$key}%' AND status = 1 LIMIT 0, 20
) UNION
(SELECT id, r1, r2, r3, r4 FROM table2 WHERE name LIKE '%{$key}%' AND status = 1 LIMIT 0, 20
) UNION
(SELECT id, r1, r2, r3, r4 FROM table3 WHERE name LIKE '%{$key}%' AND status = 1 LIMIT 0, 20
) UNION
(SELECT id, r1, r2, r3, r4 FROM table4 WHERE name LIKE '%{$key}%' AND status = 1 LIMIT 0, 20)
ORDER BY id;
注意:使用此结构,如果要按列列表排序,则需要在列列表中包含
id
如果你想订购Unionned on id,你应该把id保存在Unionned中也许需要几句解释?@ElonThan是的,我还在写,对不起:)嘿,尽快发送代码,然后添加所有其他内容。如此普遍;)@ElonThan和Gordon在一起你得快一点。
(SELECT id, r1, r2, r3, r4 FROM table1 WHERE name LIKE '%{$key}%' AND status = 1 LIMIT 0, 20
) UNION
(SELECT id, r1, r2, r3, r4 FROM table2 WHERE name LIKE '%{$key}%' AND status = 1 LIMIT 0, 20
) UNION
(SELECT id, r1, r2, r3, r4 FROM table3 WHERE name LIKE '%{$key}%' AND status = 1 LIMIT 0, 20
) UNION
(SELECT id, r1, r2, r3, r4 FROM table4 WHERE name LIKE '%{$key}%' AND status = 1 LIMIT 0, 20)
ORDER BY id;