Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 具有union和order by的sql语句_Mysql_Sql - Fatal编程技术网

Mysql 具有union和order by的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

这个SQL工作得很好,但一旦我想使用
orderbyid
对我的选择进行排序,它就不起作用了。所有这些表都有一个
id
type
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
    ,以保持结构相等
  • 然后将所有这些放在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;