Toon posts:

SQL select <rij boven en onder gegeven rij>

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

Verwijderd

Topicstarter
Ik zou niet weten waar ik op moet zoeken, ik kan wel al redelijk sql, maar kom hier toch echt niet uit.

veld_id
1
2
5
8
9

Als ik bijv. regel 5 uit een tabel selecteer, hoe kan ik dan de regel die zich boven en onder die regel bevind selecteren? (en natuurlijk niet select where id = 8 etc.)

Verwijderd

Moet je dit echt met SQL commands doen? Zou het namelijk ook niet weten of en hoe het kan. Maar wat je wel zou kunnen doen is applicatie maken waarbij een recordset aanmaakt en deze naar het volgende veld laat gaan tot die de waarde tegenkomt die je tussen die 2 waardes in ligt vervolgens het recordset eentje terug laten gaan en daarna 2 vooruit.

Mischien heb je er wat aan mocht het niet direct met SQL commands kunnen

  • MrTinux
  • Registratie: December 2000
  • Laatst online: 09:23

MrTinux

Terug van nooit weggeweest.

Ik denk niet dat dat met SQL zelf kan, je zal, zoals Jurien zegt, met een soort Recordset moeten gaan werken waar je alle results in zet, vervolgens naar 5 bladert en dan eentje terug of vooruit gaat.

De reden dat het niet zal werken is het feit dat de volgorde in de tabellen in feite niet bestaat. Dat je databaseprogrammaatje alles netjes op ID sorteert ziet er op het scherm leuk uit, maar de data is niet zo opgeslagen. Er is dus geen sprake van 'eerst het record met ID 2 en vervolgens het record met ID 5' maar gewoon een onder een bepaalde naam opgeslagen verzameling gegevens (tabel) die allemaal dezelfde kenmerken (kolommen) hebben. Dat jij een kolom 'ID' hebt, waarvan de waarde per record met 1 wordt verhoogd betekent niet dat de data dan ook in die volgorde is opgeslagen.

Je zou het DBMS de tabel door kunnen laten lopen op volgorde van toevoegen van gegevens maar het is lang niet zeker of je DBMS dat ondersteund. Ik heb het in ieder geval nog nooit gezien.

[ Voor 22% gewijzigd door MrTinux op 05-03-2003 18:10 ]

"Hij doet 't niet" = onvolledige informatie


Verwijderd

en wat met truukjes als (stel selected_id is de id van je huidge record):
where id<selected_id order by id desc limit 1;
where id>selected_id order by id limit 1;

levert je wel 3 queries op, maar ook het gewenste resultaat. Of moet het allemaal in 1 query?

[ Voor 41% gewijzigd door Verwijderd op 05-03-2003 18:13 ]


Verwijderd

Topicstarter
hmmz ik bedenk opeens "waar veld_id lager dan 5" en dat ook voor hoger, maar dan moet natuurlijk alleen de dichtsbijzeinde regel naar voren komen... Hoe flik ik dat nou weer?

[ Voor 54% gewijzigd door Verwijderd op 05-03-2003 18:16 ]


Verwijderd

Topicstarter
Verwijderd schreef op 05 maart 2003 @ 18:12:
hmmz ik bedenk opeens "waar veld_id lager dan 5" en dat ook voor hoger, maar dan moet natuurlijk alleen de dichtsbijzeinde regel naar voren komen... Hoe flik ik dat nou weer?

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 14-08 12:38

Crazy D

I think we should take a look.

Ik neem aan dat je wel van te voren weet welk ID je wilt hebben?
Als je db subqueries ondersteunt zou je ook nog iets kunnen doen als (te zoeken ID is 10...)
code:
1
2
3
4
5
6
7
8
select *
from tabel
where id in
    (
    (select max(id) from tabel where ID < 10) , 
     10,
    (select min(id) from tabel where ID > 10)
    )


wat ook nog geschreven kan worden als

code:
1
2
3
4
select top 3 *
from tabel
where id >= (select max(id) from tabel where ID < 10)
order by ID

En misschien kan het efficienter, maar nu even niet ;) * Crazy D :z bijna...

Exact expert nodig?


  • dvdhoek
  • Registratie: Februari 2002
  • Laatst online: 23-08 09:01
Sommige DBMSen ondersteunen de Lag functie waarmee een waarde uit een voorgaand record kan worden gelezen. Er is volgens mij ook een equivalent voor het volgende record, maar die weet ik nu ff niet zo snel.

Verwijderd

Topicstarter
alleen nu het volgende probleem: mysql en subquery's duzzz andere oplossing zal wel met php moeten ofzo thanks eniewee

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 14-08 12:38

Crazy D

I think we should take a look.

Zonder subqueries kan het dus met 2 queries. Als 1e opzoeken welk ID eentje lager is dan degene die je zoekt, en vervolgens een top 3 vanaf dat gevonden ID.

Exact expert nodig?

Pagina: 1