[MySQL] tussenresultaat query opslaan

Pagina: 1
Acties:
  • 130 views sinds 30-01-2008
  • Reageer

  • Mottebelke
  • Registratie: Juni 2001
  • Laatst online: 22-05 13:46
Mijn webhoster maakt gebruik van MySQL 4.0. Allemaal leuk en aardig, maar dus geen ondersteuning voor nested queries.
Mijn eerste idee was dit:

code:
1
2
select id, title from news nw, (select max(id) as max_id from news) mx
where nw.id <> mx.max_id order by id desc;


Maar dat gaat dus niet in MySQL 4.0

Dus nu heb ik het idee om het geheel te splitsen en de Select Max eerst uit te voeren en het resultaat daarvan op te slaan in een variabele. Die variabele wil ik dan gebruiken in de Where clausule van de tweede Select query.
Dus zoiets:

code:
1
2
select max(id) as max_id from news;
select id, title from news nw where nw.id <> max_id order by id desc;


Mijn vraag is of dit mogelijk is, en zo ja hoe ik dit doe.

  • Mir
  • Registratie: Maart 2001
  • Niet online

Mir

Je kan een VIEW maken?

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 22-03 18:12
code:
1
select id, title from news where id <> max(id) order by id desc

Mischien doe ik nu iets doms, maar is dit niet mogelijk?

Noushka's Magnificent Dream | Unity


  • Mottebelke
  • Registratie: Juni 2001
  • Laatst online: 22-05 13:46
Views zijn pas beschikbaar vanaf versie 5.0
Michali schreef op 15 september 2004 @ 20:02:
code:
1
select id, title from news where id <> max(id) order by id desc

Mischien doe ik nu iets doms, maar is dit niet mogelijk?
Dit is helaas niet goed, omdat de MAX(id) nu steeds gelijk is aan de id van de geselecteerde row (oftewel, hij geeft geen resultaten terug).

[ Voor 54% gewijzigd door Mottebelke op 15-09-2004 20:41 ]


Verwijderd

Gebruik iets als PHP/Perl em sla het resultaat van je eerste query op in een tijdelijke variabele en gebruik deze in de 2e query.

  • Mottebelke
  • Registratie: Juni 2001
  • Laatst online: 22-05 13:46
Kan dit direct in MySQL? Of bedoel je dat ik gewoon twee keer een aparte query ga uitvoeren en tussendoor terugkom in de code op m'n pagina?

Verwijderd

Ik doelde op 2 aparte queries uitvoeren.

  • Mottebelke
  • Registratie: Juni 2001
  • Laatst online: 22-05 13:46
Dat vind ik niet echt ideaal. Is er geen enkele manier om een deze query in MySQL te zetten?

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 21-02 23:50
je allereerste query is sowieso fout, ook in mysql 4.1 en hoger.

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Ik weet het niet zeker, maar kun je in MySQL geen temptables gebruiken? Ik weet dat MySQL soms wat moeite heeft met de standaard implementeren, maar dat zouden ze er toch niet uit gelaten hebben?

[effe opgezocht]:
Staat zelfs een specifiek voorbeeld in de manual over het gebruik van temporary tables ipv subqueries. PDF pagina 231 van de manual om precies te zijn.

  • Mottebelke
  • Registratie: Juni 2001
  • Laatst online: 22-05 13:46
Heeft iemand een linkje naar die manual van 4.0? Want ik kan alleen de nieuwste vinden en daar schijnt het niet meer in te staan (of ik kan het daar niet vinden).

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Waarom niet gewoon 1 dummy fetch doen in je aanroepende code?
Dus met deze query:
code:
1
select id, title from news nw order by id desc;

en dan 1 loze fetch en vervolgens je gewone code.

Who is John Galt?


  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
http://dev.mysql.com/doc/mysql/en/CREATE_TABLE.html

En let daarbij vooral op het keyword temporary ;)

Stappen die je moet volgen zijn dus:
create temporary table zoals jij nodig hebt
dan, select into (http://dev.mysql.com/doc/mysql/en/SELECT_INTO_Statement.html)
dan select op temporary table met de data die je wilt hebben...

en tenslotte nog wat handig leesvoer:
http://dev.mysql.com/doc/mysql/en/Rewriting_subqueries.html

Succes! :)

  • jvdmeer
  • Registratie: April 2000
  • Laatst online: 22-05 11:36
justmental schreef op 16 september 2004 @ 20:30:
Waarom niet gewoon 1 dummy fetch doen in je aanroepende code?
Dus met deze query:
code:
1
select id, title from news nw order by id desc;

en dan 1 loze fetch en vervolgens je gewone code.
of zelfs:
code:
1
select id, title from news nw order by id desc limit 1,18446744073709551615;

Dan hoef je zelfs die loze fetch niet meer te doen.

offtopic:
Het getal 18446744073709551615 haal ik uit de MySQL handleiding.

[ Voor 6% gewijzigd door jvdmeer op 17-09-2004 10:22 ]


  • Night-Reveller
  • Registratie: September 2000
  • Laatst online: 22-05 08:54
Huh? waarom niet:
code:
1
2
3
4
select id, title 
from news nw, news mx
where nw.id <> max(mx.id) 
order by id desc;

Dit kan toch wel in MySQL?

  • Mottebelke
  • Registratie: Juni 2001
  • Laatst online: 22-05 13:46
@Night-Reveller: dat werkt bij mij toch niet. MySQL geeft de volgende error: "Column: 'id' in field list is ambiguous"

Maar het werken met temporary tables werkt wel. En dat lijkt me inderdaad de beste oplossing in mijn geval. Bedankt iedereen!

Verwijderd

Mottebelke schreef op 17 september 2004 @ 15:46:
@Night-Reveller: dat werkt bij mij toch niet. MySQL geeft de volgende error: "Column: 'id' in field list is ambiguous"

Maar het werken met temporary tables werkt wel. En dat lijkt me inderdaad de beste oplossing in mijn geval. Bedankt iedereen!
Ja, allicht als een tabel met zichzelf gejoind wordt moet nog wel even vermeld worden uit welk van die 2 je de waarden wilt zien ==> colomn compleet beschrijven:
nw.id en nw.title

  • Night-Reveller
  • Registratie: September 2000
  • Laatst online: 22-05 08:54
Verwijderd schreef op 17 september 2004 @ 15:55:
Ja, allicht als een tabel met zichzelf gejoind wordt moet nog wel even vermeld worden uit welk van die 2 je de waarden wilt zien ==> colomn compleet beschrijven:
nw.id en nw.title
idd. Het moet dus

code:
1
2
3
4
select nw.id, nw.title 
from news nw, news mx
where nw.id <> max(mx.id) 
order by id desc;


zijn

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Wat is er precies mis met HAVING :?

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz

Pagina: 1