Вы можете попробовать это. Он создает искусственное значение, которое указывает, из какой таблицы получены данные, а затем сортирует по этому значению до значения 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
Редактировать
Поскольку существует требование вернуть только один столбец (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