[英]sql statement with union and order by
這個SQL很好用,但是一旦我想使用ORDER BY id
來排序我的選擇,它將無法工作。 所有這些表都有一個id
類型int
。
$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
以保持結構相等。 ( a union b union c ) as ALIAS
select
上表的別名SELECT * FROM ALIAS ORDER BY ID
。
$sth = $this->db->prepare(" SELECT * FROM (
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
) as Alias ORDER BY ID");
$sth->execute();
$data = $sth->fetchAll();
要在union
的組件中使用order by
,您需要將子查詢括在括號中。 然后,您可以在最后添加order by
。 因此,此結構將起作用:
(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
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.