Cytat(wookieb @ 3.02.2011, 14:17:22 )

SELECT * FROM (zapytania z UNION)
ORDER BY pole
Nawet SELECT nie jest potrzebny na początku, ale to rozwiązanie nie wchodzi w gre bo to posortuje wyniki po połączeniu, a potrzeba jest taka aby posortować przed połączeniem, a całość imo niedziała bo składowe zapytania zwracają wyniki, które się pokrywają. Wykonywałem testy z UNION łącząc 2 zapytania, które zwracają całkowicie różne wyniki i dla takiej sytuacji ORDER BY w tych zapytaniach sprawuje się ok.
Zapytanie jest kolos, i oryginalnie nie moje więc jest tam kilka "perełek" (narazie zostają aby się cały sklep nie wysypał), dlatego opisując problem użyłem trochę okrojonego przykładu
(SELECT product.promotion, product.id, REPLACE(product.name, 'Inny', '') AS name, product.subname, MIN(productvariant.price) AS price, IF(product.introduction IS NULL,product.description, product.introduction) AS introduction, product.promotion, MAX(productvariant.availability) AS availability, node.important AS important
FROM product
LEFT JOIN productvariant ON product.id = productvariant.productid
LEFT JOIN brand ON product.brandid = brand.id
LEFT JOIN node ON product.nodeid = node.id
WHERE product.visible = 1 AND productvariant.visible = 1 AND product.id != -1 AND product.name LIKE '% xt %' GROUP BY id ORDER BY important DESC )
UNION
(SELECT product.promotion, product.id, REPLACE(product.name, 'Inny', '') AS name, product.subname, MIN(productvariant.price) AS price, IF(product.introduction IS NULL,product.description, product.introduction) AS introduction, product.promotion, MAX(productvariant.availability) AS availability, node.important AS important
FROM product
LEFT JOIN productvariant ON product.id = productvariant.productid
LEFT JOIN brand ON product.brandid = brand.id
LEFT JOIN node ON product.nodeid = node.id
WHERE product.visible = 1 AND productvariant.visible = 1 AND product.id != -1 AND product.name LIKE '% xt%' GROUP BY id ORDER BY important DESC )
UNION
(SELECT product.promotion, product.id, REPLACE(product.name, 'Inny', '') AS name, product.subname, MIN(productvariant.price) AS price, IF(product.introduction IS NULL,product.description, product.introduction) AS introduction, product.promotion, MAX(productvariant.availability) AS availability, node.important AS important
FROM product
LEFT JOIN productvariant ON product.id = productvariant.productid
LEFT JOIN brand ON product.brandid = brand.id
LEFT JOIN node ON product.nodeid = node.id
WHERE product.visible = 1 AND productvariant.visible = 1 AND product.id != -1 AND product.name LIKE '%xt %' GROUP BY id ORDER BY important DESC )
UNION
(SELECT product.promotion, product.id, REPLACE(product.name, 'Inny', '') AS name, product.subname, MIN(productvariant.price) AS price, IF(product.introduction IS NULL,product.description, product.introduction) AS introduction, product.promotion, MAX(productvariant.availability) AS availability, node.important AS important
FROM product
LEFT JOIN productvariant ON product.id = productvariant.productid
LEFT JOIN brand ON product.brandid = brand.id
LEFT JOIN node ON product.nodeid = node.id
WHERE product.visible = 1 AND productvariant.visible = 1 AND product.id != -1 AND product.name LIKE '%xt%' GROUP BY id ORDER BY important DESC )
UNION
(SELECT product.promotion, product.id, REPLACE(product.name, 'Inny', '') AS name, product.subname, MIN(productvariant.price) AS price, IF(product.introduction IS NULL,product.description, product.introduction) AS introduction, product.promotion, MAX(productvariant.availability) AS availability, node.important AS important
FROM product
LEFT JOIN productvariant ON product.id = productvariant.productid
LEFT JOIN brand ON product.brandid = brand.id
LEFT JOIN node ON product.nodeid = node.id
WHERE product.visible = 1 AND productvariant.visible = 1 AND product.id != -1 AND product.subname LIKE '%xt%' GROUP BY id ORDER BY important DESC )
UNION
(SELECT product.promotion, product.id, REPLACE(product.name, 'Inny', '') AS name, product.subname, MIN(productvariant.price) AS price, IF(product.introduction IS NULL,product.description, product.introduction) AS introduction, product.promotion, MAX(productvariant.availability) AS availability, node.important AS important
FROM product
LEFT JOIN productvariant ON product.id = productvariant.productid
LEFT JOIN brand ON product.brandid = brand.id
LEFT JOIN node ON product.nodeid = node.id
WHERE product.visible = 1 AND productvariant.visible = 1 AND product.id != -1 AND product.introduction LIKE '%xt%' GROUP BY id ORDER BY important DESC )
UNION
(SELECT product.promotion, product.id, REPLACE(product.name, 'Inny', '') AS name, product.subname, MIN(productvariant.price) AS price, IF(product.introduction IS NULL,product.description, product.introduction) AS introduction, product.promotion, MAX(productvariant.availability) AS availability, node.important AS important
FROM product
LEFT JOIN productvariant ON product.id = productvariant.productid
LEFT JOIN brand ON product.brandid = brand.id
LEFT JOIN node ON product.nodeid = node.id
WHERE product.visible = 1 AND productvariant.visible = 1 AND product.id != -1 AND brand.name LIKE '%xt%' GROUP BY id ORDER BY important DESC )