Toon posts:

[MySQL] ORDER BY 'subselect'

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik kan dus helemaal nergens een ORDER BY 'subselect' voorbeeld vinden en krijg dan ook niet hetgeen dat ik wil creeëren voor elkaar... Misschien dat iemand van jullie me kan helpen?
code:
1
2
SELECT * FROM accommodations WHERE handle = 'antbee'
ORDER BY (SELECT `order` FROM settings WHERE handle = 'antbee')

  • js303
  • Registratie: April 2003
  • Laatst online: 01-08 22:19
heb ik ook eens nodig gehad, en vond toen dit:

http://www.mysql.com/doc/en/ANSI_diff_Sub-selects.html

Subqueries are supported in MySQL version 4.1. See section 1.6.1 Features Available From MySQL 4.1.

Upto version 4.0, only nested queries of the form INSERT ... SELECT ... and REPLACE ... SELECT ... are supported. You can, however, use the function IN() in other contexts.

You can often rewrite the query without a subquery:

SELECT * FROM table1 WHERE id IN (SELECT id FROM table2);

This can be rewritten as:

SELECT table1.* FROM table1,table2 WHERE table1.id=table2.id;

The queries:

SELECT * FROM table1 WHERE id NOT IN (SELECT id FROM table2);
SELECT * FROM table1 WHERE NOT EXISTS (SELECT id FROM table2
WHERE table1.id=table2.id);

Can be rewritten as:

SELECT table1.* FROM table1 LEFT JOIN table2 ON table1.id=table2.id
WHERE table2.id IS NULL;

  • André
  • Registratie: Maart 2002
  • Laatst online: 19-08 12:30

André

Analytics dude

In ORDER BY moet je een kolomnaam noemen. Dus de 2de SELECT moet je eerst uitvoeren, het resultaat in een variabele pleuren, en die bij de eerstgenoemde SELECT gebruiken.

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Je moet die settings tabel erbij joinen, dan kun je gewoon sorteren op die kolom.

Who is John Galt?


  • whoami
  • Registratie: December 2000
  • Laatst online: 18:49
Ik wist niet dat zoiets mogelijk was? Sorteren op een subselect?

Of is dit weer zo typisch iets dat wel in MySQL mogelijk is , maar in vrijwel alle andere DB's niet?
Voor zover ik weet moet de kolom waar je op sorteert, een kolom zijn die je in je SELECT clausule hebt opgenomen.

https://fgheysels.github.io/


  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

whoami schreef op 02 May 2003 @ 09:11:
Voor zover ik weet moet de kolom waar je op sorteert, een kolom zijn die je in je SELECT clausule hebt opgenomen.
Bij Oracle hoeft dit niet iig, de gebruikte kolom(men) moet(en) wel uit tabellen komen die in de from clause genoemd zijn.

Who is John Galt?


Verwijderd

Topicstarter
justmental schreef op 02 May 2003 @ 07:41:
Je moet die settings tabel erbij joinen, dan kun je gewoon sorteren op die kolom.
Kun je dit iets nader uitleggen? Ik wil dus voorkomen dat ik 2 select statements moet runnen op de database. Liever een subselect, is veel sneller!

  • Rotjeknor
  • Registratie: April 2001
  • Laatst online: 03-02 15:29
* Rotjeknor is in een goede bui:
PHP:
1
2
3
4
5
6
7
8
9
10
select
  accommodations.*
from
  settings,
  accommodations
where 
  settings.handle = 'antbee' and 
  accommodations.handle = 'antbee' 
order by
  settings.order

Ook Knor is aangestoken met het ligfietsvirus!


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

justmental schreef op 02 May 2003 @ 07:41:
Je moet die settings tabel erbij joinen, dan kun je gewoon sorteren op die kolom.
Denk dat jij niet goed leest :P

Volgens mij wil hij:
select ... from ... order by [resultstring_from_subselect_as_kolomname];
whoami schreef op 02 May 2003 @ 09:11:
Ik wist niet dat zoiets mogelijk was? Sorteren op een subselect?

Of is dit weer zo typisch iets dat wel in MySQL mogelijk is , maar in vrijwel alle andere DB's niet?
Voor zover ik weet moet de kolom waar je op sorteert, een kolom zijn die je in je SELECT clausule hebt opgenomen.
Volgens mij kan het ook niet en dan al helemaal niet in MySQL natuurlijk...
Volgens mij is trouwens de kolom niet verplicht een uit het eindresultaat, zolang het er maar een is die in het eindresultaat had kunnen zitten. (bij postgres iig niet)
Verwijderd schreef op 02 May 2003 @ 10:39:
Kun je dit iets nader uitleggen? Ik wil dus voorkomen dat ik 2 select statements moet runnen op de database. Liever een subselect, is veel sneller!
Een query met een subselect is echt niet per definitie sneller dan eentje in 2 statements. Zeker als je het slim aanpakt en je het resultaat van de subselect meerdere keren kan gebruiken.

En dan nog, als je de manual van mysql had doorzocht op 'subselect' of 'subquery' had je geweten dat mysql dat vooralsnog alleen in de 4.1.x-alpha serie ondersteund...

* ACM denkt dat ook Rotjeknor niet goed kijkt

[ Voor 3% gewijzigd door ACM op 02-05-2003 10:53 ]


  • Rotjeknor
  • Registratie: April 2001
  • Laatst online: 03-02 15:29
ACM schreef op 02 mei 2003 @ 10:52:
[...]
* ACM denkt dat ook Rotjeknor niet goed kijkt
Hmmm.... Ik ben niet echt wakker geloof ik, je hebt gelijk ACM... Dit zal wel met 2 queries moeten...

Edit:
Hmmmz, ik begin nu ook weer te twijfelen, zou toch eigenlijk wel goed moeten zijn die query van mij.

Ik stel voor dat de TS wat data geeft ter voorbeeld... Dan kunnen we tenminste eens fatsoenlijk nadenken (-:

[ Voor 35% gewijzigd door Rotjeknor op 02-05-2003 11:10 ]

Ook Knor is aangestoken met het ligfietsvirus!


  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

ACM schreef op 02 May 2003 @ 10:52:
Denk dat jij niet goed leest :P

Volgens mij wil hij:
select ... from ... order by [resultstring_from_subselect_as_kolomname];
Dan lees ik nog steeds verkeerd denk ik :o

Hij heeft 2 tabellen, met dezelfde 'key' (handle).
Hij wil een query op accommodations sorteren op een kolom uit settings, met dezelfde key.
Dan lijkt me een join toch kunnen, mits de settings tabel maximaal 1 record per handle heeft?

Who is John Galt?


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Nee :)

bedenk dit:
"SELECT `order` FROM settings WHERE handle = 'antbee'"
resultaat -> "kolomnaam" (en evt meerdere, toegegeven)

"SELECT * FROM accommodations WHERE handle = 'antbee'"
resultaat -> meerdere keren (id, veld1, veld2, veld3, kolomnaam, veld4, ...)

Het resultaat van de subselect in de ORDER BY is namelijk bij elke row uit de buitenste select hetzelfde... En sorteren daarop zou onzin zijn ;)

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Ah, ik snap hem al.
Ik ging ervan uit dat hij meerdere 'handle's had en per handle een 'order' in settings had en de handle's uit accomodations daarop wilde sorteren.
Maar nu lees ik dat ik daarin iets te voorbarig ben :o

Who is John Galt?

Pagina: 1