MySQL - UNION select 先排序
MySQL - UNION select ordering first
我有 SQL SELECT
和 UNION (SELECT...)
SELECT virtuemart_product_id
FROM #__virtuemart_products
WHERE product_special = 1
UNION
(SELECT virtuemart_product_id
FROM #__virtuemart_product_badges
WHERE badge = 3)
这个selectreturnsvirtuemart_product_id:
12345,54321,...,789,987
- 例如 last ids 来自 UNION (#__virtuemart_product_badges) tables.
我需要对结果进行排序,以便来自 UNION
table 的 ID 位于第一个(union_select_virtuemart_product_id
和 first_select_virtuemart_product_id
之后)。
如果我试试这个:
...
UNION
(SELECT virtuemart_product_id
FROM #__virtuemart_product_badges AS badge
WHERE badge = 3)
ORDER BY badge.virtuemart_product_id
结果当然是错误的。除了 ...ORDER BY virtuemart_product_id
之外的任何 ORDER BY
都以错误结束。
这可能吗?
感谢
尝试做一些嵌套查询:
select * from (YOUR ALL QUERY) AS p order by virtuemart_product_id
如果您想要联合 table 的结果,那么首先 select 那个 table 在那个联合之后另一个 table。像这样:-
(SELECT virtuemart_product_id
FROM #__virtuemart_product_badges
WHERE badge = 3)
UNION
SELECT virtuemart_product_id
FROM #__virtuemart_products
WHERE product_special = 1
你可以试试这个。它创建一个人工值,指示数据来自哪个 table,然后按该值在 id 值之前排序。通过更改分配给数据集的值和排序顺序,您可以更改先输出哪些值:
(SELECT virtuemart_product_id, 0 AS dataset
FROM #__virtuemart_products
WHERE product_special = 1)
UNION
(SELECT virtuemart_product_id, 1 AS dataset
FROM #__virtuemart_product_badges
WHERE badge = 3)
ORDER BY dataset DESC, virtuemart_product_id
编辑
由于要求 return 只有一列 (virtuemart_product_id
),您需要将此查询包装在子查询中并从中 SELECT virtuemart_product_id
:
SELECT virtuemart_product_id
FROM ((SELECT virtuemart_product_id, 0 AS dataset
FROM #__virtuemart_products
WHERE product_special = 1)
UNION
(SELECT virtuemart_product_id, 1 AS dataset
FROM #__virtuemart_product_badges
WHERE badge = 3)
ORDER BY dataset DESC, virtuemart_product_id) v
我有 SQL SELECT
和 UNION (SELECT...)
SELECT virtuemart_product_id
FROM #__virtuemart_products
WHERE product_special = 1
UNION
(SELECT virtuemart_product_id
FROM #__virtuemart_product_badges
WHERE badge = 3)
这个selectreturnsvirtuemart_product_id:
12345,54321,...,789,987
- 例如 last ids 来自 UNION (#__virtuemart_product_badges) tables.
我需要对结果进行排序,以便来自 UNION
table 的 ID 位于第一个(union_select_virtuemart_product_id
和 first_select_virtuemart_product_id
之后)。
如果我试试这个:
...
UNION
(SELECT virtuemart_product_id
FROM #__virtuemart_product_badges AS badge
WHERE badge = 3)
ORDER BY badge.virtuemart_product_id
结果当然是错误的。除了 ...ORDER BY virtuemart_product_id
之外的任何 ORDER BY
都以错误结束。
这可能吗?
感谢
尝试做一些嵌套查询:
select * from (YOUR ALL QUERY) AS p order by virtuemart_product_id
如果您想要联合 table 的结果,那么首先 select 那个 table 在那个联合之后另一个 table。像这样:-
(SELECT virtuemart_product_id
FROM #__virtuemart_product_badges
WHERE badge = 3)
UNION
SELECT virtuemart_product_id
FROM #__virtuemart_products
WHERE product_special = 1
你可以试试这个。它创建一个人工值,指示数据来自哪个 table,然后按该值在 id 值之前排序。通过更改分配给数据集的值和排序顺序,您可以更改先输出哪些值:
(SELECT virtuemart_product_id, 0 AS dataset
FROM #__virtuemart_products
WHERE product_special = 1)
UNION
(SELECT virtuemart_product_id, 1 AS dataset
FROM #__virtuemart_product_badges
WHERE badge = 3)
ORDER BY dataset DESC, virtuemart_product_id
编辑
由于要求 return 只有一列 (virtuemart_product_id
),您需要将此查询包装在子查询中并从中 SELECT virtuemart_product_id
:
SELECT virtuemart_product_id
FROM ((SELECT virtuemart_product_id, 0 AS dataset
FROM #__virtuemart_products
WHERE product_special = 1)
UNION
(SELECT virtuemart_product_id, 1 AS dataset
FROM #__virtuemart_product_badges
WHERE badge = 3)
ORDER BY dataset DESC, virtuemart_product_id) v