MySQL] Meerdere id's selecteren

Pagina: 1
Acties:

  • jj85
  • Registratie: Januari 2002
  • Laatst online: 21:48
Stel ik wil alle rijen met de id's 1,3,5,6,7,8,9 selecteren uit de database, hoe kan ik dat dan doen zonder een loop of iets dergelijks te gebruiken, maar gewoon één query?

Dacht eerst aan
SELECT * FROM tabel WHERE id=(1,3,5,6,7,8,9)
Maar dat werkt niet...

  • elevator
  • Registratie: December 2001
  • Niet online

elevator

Officieel moto fan :)

(id=1) OR (id=3) OR (id between 5 and 9) ? :P

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
elevator schreef op 13 april 2004 @ 17:04:
(id=1) OR (id=3) OR (id between 5 and 9) ? :P
Kent MySQL geen IN?

SELECT * FROM tabel Where ID in (1,3,5,6,7,8,9)

:?

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


  • jj85
  • Registratie: Januari 2002
  • Laatst online: 21:48
RobIII schreef op 13 april 2004 @ 17:05:
[...]

Kent MySQL geen IN?

SELECT * FROM tabel Where ID in (1,3,5,6,7,8,9)

:?
Bedankt, het werkt inderdaad met IN.
Thnx :D

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
vogelspin schreef op 13 april 2004 @ 17:08:
[...]
Bedankt, het werkt inderdaad met IN.
Thnx :D
Ghehe... Kon het zo snel niet vinden in de MySQL manual, en ik werk er zelf nooit me...

"IN" is een k*twoord om te zoeken in de MySQL Manual ;)

IMHO zou het hier moeten staan... maar daar staat de IN operator niet... :?

[ Voor 22% gewijzigd door RobIII op 13-04-2004 17:11 ]

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


  • jj85
  • Registratie: Januari 2002
  • Laatst online: 21:48
RobIII schreef op 13 april 2004 @ 17:09:
[...]

Ghehe... Kon het zo snel niet vinden in de MySQL manual, en ik werk er zelf nooit me...

"IN" is een k*twoord om te zoeken in de MySQL Manual ;)
Ik had zelf ook al gezocht maar kon weinig info hierover vinden.
IN is idd een lastig woord om als zoekterm te gebruiken :P

  • jj85
  • Registratie: Januari 2002
  • Laatst online: 21:48
RobIII schreef op 13 april 2004 @ 17:09:

IMHO zou het hier moeten staan... maar daar staat de IN operator niet... :?
Heb hem inmiddels op http://dev.mysql.com/doc/mysql/en/Comparison_Operators.html gevonden.

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Damned. Heb hem nu ook ;) Ik zocht "op alfabet" en keek dus bij I... Ik zag alleen expr.... staan... :+

expr IN (value,...)

Verder kijken dan je neus lang is heet dat :D Ik ben die pagina wel 3 keer door gescrolled |:(

[ Voor 8% gewijzigd door RobIII op 13-04-2004 17:18 ]

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


Verwijderd

als het je gaat om alle oneven nummers kan je ook doen
SELECT * FROM tabel Where MOD(ID, 2) = 1

  • cameodski
  • Registratie: Augustus 2002
  • Laatst online: 06-11-2023
vogelspin schreef op 13 april 2004 @ 17:03:
Stel ik wil alle rijen met de id's 1,3,5,6,7,8,9 selecteren uit de database, hoe kan ik dat dan doen zonder een loop of iets dergelijks te gebruiken, maar gewoon één query?

Dacht eerst aan
SELECT * FROM tabel WHERE id=(1,3,5,6,7,8,9)
Maar dat werkt niet...
Ik weet niet hoe lang je lijst met id's kan worden, maar kijk uit dat je performance niet instort.

Never underestimate the power of


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op 13 april 2004 @ 17:35:
als het je gaat om alle oneven nummers kan je ook doen
SELECT * FROM tabel Where MOD(ID, 2) = 1
Volgens mij zijn 6 en 8 even hoor ;)

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


  • jj85
  • Registratie: Januari 2002
  • Laatst online: 21:48
cameodski schreef op 13 april 2004 @ 17:37:
[...]

Ik weet niet hoe lang je lijst met id's kan worden, maar kijk uit dat je performance niet instort.
Het gaat om maximaal 10 id's

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:32
Verwijderd schreef op 13 april 2004 @ 17:35:
als het je gaat om alle oneven nummers kan je ook doen
SELECT * FROM tabel Where MOD(ID, 2) = 1
Een functie in je where clause gebruiken, is nogal slecht voor de performance.
In dit geval wil dat zeggen dat de index die op ID ligt (en die zal er wel liggen, het is ws een PK) niet gebruikt zal worden.

https://fgheysels.github.io/


  • jj85
  • Registratie: Januari 2002
  • Laatst online: 21:48
En dan nu eigenlijk het vervolg op de vorige vraag :P

Ik heb nu een aantal id's geselecteerd uit de database, maar ik wil deze volgorde behouden, hoe doe ik dat?

Stel ik voer onderstaande query uit:
SELECT * FROM tabel WHERE id IN ( 2, 7, 1 )

Hoe kan ik er dan voor zorgen dat de volgorder (2,7,1) behouden blijft? Want normaal gaat MySQL ze automatisch op id selecteren...

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:32
Waarom wil je dat doen?
Dat afaik niet.

https://fgheysels.github.io/


  • jj85
  • Registratie: Januari 2002
  • Laatst online: 21:48
whoami schreef op 13 april 2004 @ 20:07:
Waarom wil je dat doen?
Dat afaik niet.
Omdat de volgorde van de id's (2,7,1) de volgorde is waarin een gebeurtenis heeft plaatstgevonden.
En nu wel ik deze weer op dezelfde volgorde weergeven.

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:32
vogelspin schreef op 13 april 2004 @ 20:18:
[...]

Omdat de volgorde van de id's (2,7,1) de volgorde is waarin een gebeurtenis heeft plaatstgevonden.
En nu wel ik deze weer op dezelfde volgorde weergeven.
Heb je dan geen datum/tijd veld voor ieder record die aangeeft wanneer die gebeurtenis heeft plaatsgevonden?
Dan kan je daar op sorteren.

https://fgheysels.github.io/


  • jj85
  • Registratie: Januari 2002
  • Laatst online: 21:48
whoami schreef op 13 april 2004 @ 20:19:
[...]


Heb je dan geen datum/tijd veld voor ieder record die aangeeft wanneer die gebeurtenis heeft plaatsgevonden?
Dan kan je daar op sorteren.
Nee, die volgorde van id's komt van buitenaf, dus die hebben geen datum/tijd veld.
Dus daar valt ook niet op te sorteren.

  • Guldan
  • Registratie: Juli 2002
  • Laatst online: 24-05 23:58

Guldan

Thee-Nerd

hmmm... Je zal dan toch een ander veld moeten doen of ze in stappen verwerken.Volgorde in een relationele db is eigenlijk ver te zoeken.In de meeste database bewerk programma's staat deze goed omdat ze dan gewoon een ORDER BY uitvoeren.Maar eigenlijk staat alles doorelkaar.
Wij hebben dit probleem ook al uitgevonden met onze eigen database.

You know, I used to think it was awful that life was so unfair. Then I thought, wouldn't it be much worse if life were fair, and all the terrible things that happen to us come because we actually deserve them?


  • bigtree
  • Registratie: Oktober 2000
  • Laatst online: 31-03 15:20
vogelspin schreef op 13 april 2004 @ 20:05:
Ik heb nu een aantal id's geselecteerd uit de database, maar ik wil deze volgorde behouden, hoe doe ik dat?

Stel ik voer onderstaande query uit:
SELECT * FROM tabel WHERE id IN ( 2, 7, 1)

Hoe kan ik er dan voor zorgen dat de volgorder (2,7,1) behouden blijft? Want normaal gaat MySQL ze automatisch op id selecteren...
SQL:
1
2
3
4
SELECT  * 
FROM tabel
WHERE id
IN ( 2, 7, 1  ) ORDER BY id = 2 DESC, id = 7 DESC, id = 1 DESC
Hoewel dit zeker werkt is het vast niet de snelste oplossing. Dit was als grap bedoeld. Je kunt dit beter in (naar ik aanneem) php oplossen.

Lekker woordenboek, als je niet eens weet dat vandalen met een 'n' is.


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 23:14
De oplossing van bigtree lijkt me helemaal zo gek nog niet, als je bedenkt dat de query toch al dynamisch samengesteld moet worden (voor die IN-expressie) en het om een beperkt, klein aantal items gaat (zoals de TS al eerder aangaf). Verder kun je het natuurlijk ook uitstekend in PHP oplossen, want een klein aantal rijen passen natuurlijk wel in je geheugen.

  • jj85
  • Registratie: Januari 2002
  • Laatst online: 21:48
Ik heb het inmiddels opgelost op een 'PHP' manier.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
$ids = "2,7,1";

$select = "SELECT * FROM tabel WHERE id IN (".$ids.")";
$query = mysql_query($select);

while($list = mysql_fetch_object($query)){
$array[$list->lid] = "blaat blaat enz...";
}

$explode = explode(",", $ids);

foreach($explode as $waarde){
$output.= $array[$waarde];
}

echo $output;
?>


Werkt prima zo :D
Pagina: 1