Multidesk.be » Forums » Webdevelopment & -scripting » [MySQL] Sorteren binnen union

  • Pagina
  • 1 van 1
0 gasten lezen dit onderwerp.
^ Onderwerp geschreven door een gast op maandag 27 juli 2009 om 09:41:25.
Hallo,

Ik zit met het volgende probleem.
Ik heb een tabel met velden A, B en C.
Die geef ik weer op een website, en je kunt kiezen op welk veld je wilt sorteren.
Nu heeft veld C mogelijk waarden (0) die ik eigenlijk altijd onderaan wil hebben als je op veld C sorteerd.

Ik dacht iets te doen als:
SELECT * FROM tabel WHERE C > 0 ORDER BY C
UNION
SELECT * FROM tabel WHERE C = 0

Nu komen de C waardes met 0 wel onderaan te staan, maar de waardes daarboven worden niet meer gesorteerd.
Iemand een suggestie hoe ik dit voor elkaar kan krijgen?
^ Reactie #1 geschreven door SMG op maandag 27 juli 2009 om 10:48:37.
SMG's avatar
Multiviteit: 12000
Moderator
Is ook normaal in een UNION ;)
Eerst gaat hij de eerste query uitvoeren (e.g. alles wat boven de UNION staat - dus ook de ORDER BY)) en dan gaat hij de volgende query uitvoeren. Die ORDER BY staat daar dus voor niets tussen aangezien C in de eerste query altijd dezelfde waarde heeft.

Als dat je SQL query is dan is hetvolgende dus handiger en vele malen efficiŽnter:
SELECT *
FROM tabel
WHERE c = 0 OR C = 1
ORDER BY C

Volgende notatie is wat korter (maar ben niet zeker of die met je databank zal werken, ben Postgres gewoon):
WHERE C IN (0, 1)

Een UNION is best wel te vermijden, zeker in zulke situaties.
Als je voorbeeld echter veel simpeler is opgesteld dan het echte probleem dan kan je misschien volgende pagina lezen:
http://publib.boulder.ibm.com/infocenter/cscv/v10r1/index.jsp?topic=/com.ibm.cloudscape.doc/ctuntransform14044.html
Deze tekst werd het laatst bewerkt voor 15.92 % door SMG op maandag 27 juli 2009 om 10:51:39.
^ Reactie #2 geschreven door een gast op donderdag 30 juli 2009 om 11:45:20.
Het probleem is als volgt:

Veld C is de prijs van een product.
Als iemand geen prijs heeft ingevuld (prijs = 0), wordt dat op de website weergegeven als 'prijs op aanvraag'.

Nu kun je op prijs sorteren, maar ik wil dat de mensen die geen prijs hebben ingevuld, altijd onderaan de resultatenlijst terecht komen, zowel bij ASC als bij DESC sorteren.

Vandaar dat ik een UNION probeerde, die eerst alle gewone prijzen selecteert en sorteert.
En vervolgens de 'prijs op aanvraag' resultaten onderaan toevoegt.

Helaas heeft dit niet het gewenste resultaat (de prijs op aanvraag komt wel onderaan het resultaat, maar de andere prijzen zijn niet meer gesorteerd). Het voorbeeld van SMG geeft ook niet het gewenste resultaat. Ik zou het natuurlijk ook in PHP kunnen oplossen, maar het leek me netter om dit via SQL te doen, indien mogelijk...
^ Reactie #3 geschreven door SMG op donderdag 30 juli 2009 om 16:52:44.
SMG's avatar
Multiviteit: 12000
Moderator
Dan kan je ook gewoon 2 queries uitvoeren. Eerst die zonder 0 en verwerken en nadien die met 0 er gewoon achter plakken.
  • Pagina
  • 1 van 1

Snel-antwoordformulier
Toon uitgebreid antwoordformulier Bericht nalezen Bericht plaatsen