Mysql SELECT UNION返回错误的结果?

时间:2017-08-31 14:42:03

标签: mysql

我有这个单一的查询。

$sql = "SELECT * FROM `my_table` WHERE type!='' AND (page_option='0' OR page_option='1') ORDER BY type ASC";

返回的列scenario的前三个结果是a1d3e1

现在,当我使用其他相同的表格执行UNION ALL时:

$sql = "SELECT * FROM `my_table` 
                    WHERE type!='' AND (page_option='0' OR page_option='1')
                    UNION ALL
                    SELECT * FROM `my_table_2`
                    WHERE type!='' AND (page_option='0' OR page_option='1')
                    UNION ALL
                    SELECT * FROM `my_table_3`
                    WHERE type!='' AND (page_option='0' OR page_option='1')
                    ORDER BY type ASC";

我遍历结果,my_table的前三列是e1e1e1

每个表都有一个名为type的列,用于标识结果来自的表。因此,对于联合查询结果,我添加了一个条件,仅显示来自my_table

的方案
if($type=="my_table") {
  echo $scenario;
}

场景应该与单个查询相同,但它们不是。

我如何解决?

1 个答案:

答案 0 :(得分:2)

你的假设是错误的。除非您使用ORDER BY

,否则订单无法保证

在您的情况下,您只能按type订购,因此其他字段的顺序可以是随机的

你可以在这里找到一个很好的解释和例子:

http://sqlblog.com/blogs/alexander_kuznetsov/archive/2009/05/20/without-order-by-there-is-no-default-sort-order.aspx