[(my)SQL] Vinden van maximum order

Pagina: 1
Acties:

  • hobbit_be
  • Registratie: November 2002
  • Laatst online: 04-07-2025
Hoi zit met eens stom probleempje dat zo basic is - i'm ashamed

Table: id (P), orderid(Unique)

Content:

1 1
2 2
3 3

nu wil ik element drie eentje naar boven doen (ie: change orderid)

dus ik zoek (dacht ik naar de hoogste waarde van id die kleiner is dan de huidige)

SELECT MAX(orderid), id FROM table WHERE orderid < 3 GROUP BY orderid.

Nu krijg ik echter twee result terug. (moet dus eigenlijk tweede row geven)

als ik SELECT MAX(orderid) FROM... WHERE orderid < 3 dan krijg ik wel proper 2 terug maar dan moet ik wederom een query doen die dan de juiste primary key teruggeeft zodat ik deze kan aanpakken.

Kan dit niet in 1 query? (mySQL dus geen SUBQUERYS)

  • GX
  • Registratie: Augustus 2000
  • Laatst online: 14-05-2025

GX

Nee.

MySQL kent echter sinds 'kort' wel subqueries.

Verder, MAX(orderid) - 1 ?

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 24-05 14:53

NMe

Quia Ego Sic Dico.

SQL:
1
2
3
4
UPDATE table
SET orderid = orderid + 1
WHERE order_id < hetiddatjewilveranderen
  AND orderid >= hetiddathetveranderderecordmoetkrijgen

Hier dus:
SQL:
1
2
3
4
UPDATE table
SET orderid = orderid + 1
WHERE order_id < 3
  AND orderid >= 2

En daarna gewoon je update van het record dat je wil veranderen. Als ik je vraag tenminste goed begrijp. :)

[ Voor 26% gewijzigd door NMe op 10-05-2004 11:33 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Je doet een group by op orderid, dus wordt er nu per verschillend order id een result terug gegeven. Haal dat maar eens weg, dan doet ie waarschijnlijk al wat je wilt.

edit:

hmm, toch eens leren lezen

[ Voor 13% gewijzigd door bigbeng op 10-05-2004 11:02 ]


  • ripexx
  • Registratie: Juli 2002
  • Laatst online: 25-05 22:36

ripexx

bibs

GX schreef op 10 mei 2004 @ 10:57:
MySQL kent echter sinds 'kort' wel subqueries.

Verder, MAX(orderid) - 1 ?
Jep vanaf versie 4.iets maar de meeste hosters draaien nog steeds versie 3.iets. Dus vandaar dat het niet allemaal zo makkelijk gaat. Ik hoop dat mijn hoster in ieder geval snel overschakkeld maar dat zal nog wel even duren. :(

At TS. (workaround)
SQL:
1
2
3
4
5
6
SELECT MAX( orderid ) , id
FROM test
WHERE orderid < 3
GROUP BY id
ORDER BY id DESC
LIMIT 1 
bigbeng schreef op 10 mei 2004 @ 11:01:
Je doet een group by op orderid, dus wordt er nu per verschillend order id een result terug gegeven. Haal dat maar eens weg, dan doet ie waarschijnlijk al wat je wilt.
Als je werkt met aggerated functies moet je group by gebruiken. ;) Hoewel menig een het ding ergens anders voor gebruikt moet je het hier juist wel gebruiken. :)

[ Voor 31% gewijzigd door ripexx op 10-05-2004 11:07 ]

buit is binnen sukkel


  • hobbit_be
  • Registratie: November 2002
  • Laatst online: 04-07-2025
is het dan nog niet simpler:

SQL:
1
SELECT orderid, id WHERE orderid < 3 ORDER BY orderid DESC LIMIT 1

  • ripexx
  • Registratie: Juli 2002
  • Laatst online: 25-05 22:36

ripexx

bibs

hobbit_be schreef op 10 mei 2004 @ 11:20:
is het dan nog niet simpler:

SQL:
1
SELECT orderid, id WHERE orderid < 3 ORDER BY orderid DESC LIMIT 1
Jep dat zou ook kunnen. En is waarschijnlijk ook een stuk sneller, je doet namelijk dan alleen maar een select. :) Maar indien je model iets ander was geweest dan heb je die max() soms nodig. :)

buit is binnen sukkel


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 24-05 14:53

NMe

Quia Ego Sic Dico.

ripexx schreef op 10 mei 2004 @ 11:30:
[...]


Jep dat zou ook kunnen. En is waarschijnlijk ook een stuk sneller, je doet namelijk dan alleen maar een select. :) Maar indien je model iets ander was geweest dan heb je die max() soms nodig. :)
Is die van mij niet nog een stukkie beter omdat die ook werkt als je het 3e record naar plaats 1 wil verplaatsen? :P

1 3
2 1
3 2

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • hobbit_be
  • Registratie: November 2002
  • Laatst online: 04-07-2025
NME84...

je mag er niet van uitgaan dat de orders 1 . 2 .3 zijn (ook 22. 28. 66) dit vanwege het deleten etc... en een update op ALLE velden zie ik niet zitten ;)

als je 3 -> 1 kun je ook (LIMIT 1, 3) (ie verplaats met 3)... Maar das al meer advanced dan ik wil aanbieden (KISS ;)

Thx all

Twas idd dus veel simpeler dan ik
Pagina: 1