[MYSQL] Record voor en na een bepaald record ophalen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • me1299
  • Registratie: Maart 2000
  • Laatst online: 11-09 11:19

me1299

$ondertitel

Topicstarter
Ik heb een tabel met klanten nu wil ik bij een bepaalde klant de volgende klant hebben gesorteerd op klantnaam.

Een volgend ID opvragen kan als volgt:
code:
1
SELECT pkKlantID FROM klanten WHERE pkKlantID < {$pkKlantID} ORDER BY pkKlantID ASC LIMIT 1


Maar zodra het geen numerieke velden zijn heb ik een probleem.

code:
1
SELECT pkKlantID FROM klanten WHERE pkKlantID < {$pkKlantID} ORDER BY klantnaam ASC LIMIT 1


Omdat kleiner dan niets zegt over de alfabetische volgorde.. Hoe kan ik dit in een query oplossen? Ik kan wel de gehele tabel fetchen naar een array fetchen met php en dan de elementen voor en na het benodigde record eruit lichten maar dat lijkt me alles behalve efficient.

ROW_NUMBER heeft MySQL niet dus dat gaat hem niet worden. Ik kan wel in MySQL een counter mee laten lopen maar daar kan je vervolgens geen WHERE clause aan vasthangen.

[ Voor 10% gewijzigd door me1299 op 04-06-2010 13:54 ]

Het maakt eigenlijk niet uit wat je bewuste geest doet, omdat je onderbewuste automatisch precies dat doet wat het moet doen


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
SQL:
1
Select id, naam from klanten where naam > huidigenaam order by naam limit 1

:?
Als je de huidige naam niet weet/hebt zul je die dus even moeten ophalen (in je code of met een subquery)

[ Voor 42% gewijzigd door RobIII op 04-06-2010 14:06 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

Verwijderd

SQL:
1
2
SELECT pkKlantID FROM klanten ORDER BY klantnaam ASC LIMIT x-1,1
SELECT pkKlantID FROM klanten ORDER BY klantnaam ASC LIMIT x+1,1

:?

[ Voor 43% gewijzigd door Verwijderd op 04-06-2010 14:03 ]


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op vrijdag 04 juni 2010 @ 14:00:
SQL:
1
SELECT pkKlantID FROM klanten WHERE pkKlantID < {$pkKlantID} ORDER BY klantnaam ASC LIMIT 1,1

:?
Je where-clause kijkt naar ID's; dat gaat niet werken als je een naam na Gerritsen zoekt (bijv. Janssen) waarbij Janssen ID 3 heeft en Gerritsen ID 8 ;)
Ah; een edit :P
Verwijderd schreef op vrijdag 04 juni 2010 @ 14:00:
SQL:
1
SELECT pkKlantID FROM klanten ORDER BY klantnaam ASC LIMIT 1,1

:?
En nu selecteer je enkel de eerste klant uit je klanten tabel ;)

Misschien even nadenken voor je post...

Ah, weer een edit:
Verwijderd schreef op vrijdag 04 juni 2010 @ 14:00:
SQL:
1
2
SELECT pkKlantID FROM klanten ORDER BY klantnaam ASC LIMIT x-1,1
SELECT pkKlantID FROM klanten ORDER BY klantnaam ASC LIMIT x+1,1

:?
Wat zou dit moeten doen :? Nogmaals: even nadenken voor je post...

[ Voor 49% gewijzigd door RobIII op 04-06-2010 14:04 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

Verwijderd

Ik zat al te wijzigen ;)

Oei, die ook niet goed O-) |:(

[ Voor 42% gewijzigd door Verwijderd op 04-06-2010 14:04 ]


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Begin anders even met een tutorial SQL ;)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • me1299
  • Registratie: Maart 2000
  • Laatst online: 11-09 11:19

me1299

$ondertitel

Topicstarter
Verwijderd schreef op vrijdag 04 juni 2010 @ 14:00:
SQL:
1
2
SELECT pkKlantID FROM klanten ORDER BY klantnaam ASC LIMIT x-1,1
SELECT pkKlantID FROM klanten ORDER BY klantnaam ASC LIMIT x+1,1

:?
Hmm, ik zat blijkbaar veel te moeilijk te denken want dit werkt prima :o
BBBB valideert dus als > AAAAAAAAAAAAA.

Het maakt eigenlijk niet uit wat je bewuste geest doet, omdat je onderbewuste automatisch precies dat doet wat het moet doen


Acties:
  • 0 Henk 'm!

Verwijderd

RobIII schreef op vrijdag 04 juni 2010 @ 14:02:
[...]

Wat zou dit moeten doen :? Nogmaals: even nadenken voor je post...
Wat dacht je dat hier fout aan was als ik vragen mag?
DeathKnight24 schreef op vrijdag 04 juni 2010 @ 14:08:
[...]

BBBB valideert dus als > AAAAAAAAAAAAA.
Het gaat daar om de order by :P

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op vrijdag 04 juni 2010 @ 14:13:
Wat dacht je dat hier fout aan was als ik vragen mag?
Ik miste even dat je met x+1 en x-1 doelde op de positie t.o.v. het huidige record; die moet je dan dus wel hebben. Ik begreep dat TS de volgende/vorige klant na "Janssen" wou hebben, niet de volgende/vorige klant na "record 25"

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • me1299
  • Registratie: Maart 2000
  • Laatst online: 11-09 11:19

me1299

$ondertitel

Topicstarter
RobIII schreef op vrijdag 04 juni 2010 @ 14:18:
[...]

Ik miste even dat je met x+1 en x-1 doelde op de positie t.o.v. het huidige record; die moet je dan dus wel hebben. Ik begreep dat TS de volgende/vorige klant na "Janssen" wou hebben, niet de volgende/vorige klant na "record 25"
Dat klopt ook, ik wou inderdaad de eerste volgende naam uit een tabel hebben.

Het maakt eigenlijk niet uit wat je bewuste geest doet, omdat je onderbewuste automatisch precies dat doet wat het moet doen


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
DeathKnight24 schreef op vrijdag 04 juni 2010 @ 14:19:
[...]


Dat klopt ook, ik wou inderdaad de eerste volgende naam uit een tabel hebben.
Ja, op basis van 'recordpositie', ik begreep op basis van naam.

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij

Pagina: 1