Black Friday = Pricewatch Bekijk onze selectie van de beste Black Friday-deals en voorkom een miskoop.

[mysql] select in() statement werkt niet goed

Pagina: 1
Acties:

  • marnix1977
  • Registratie: Januari 2006
  • Laatst online: 17:00
Ik kom er ff niet meer uit dus ik hoop dat iemand mij kan helpen. Ik heb twee tabellen, 1 met festival info en 1 met lokaties. Omdat sommige festivals op meer lokaties plaats vinden, heb ik in de festival tabel een lokatieids veld aangemaakt als een varchar. Wanneer ik nu lokaties toevoeg aan een festival krijg ik netjes de waarden in dat veld te staan (bv 12,43,59), geen probleem.

Vraag ik nu van een festival op op welke plekken die plaatsvindt, dan gaat het goed.
code:
1
select * from lokaties where lokatieid in ($info->lokatieids)

De variable $info->lokatieids wordt eerder opgehaald uit de festival database en bevat dus bv 12,43,59

Als ik nu echter van een lokatie wil weten welke festivals er spelen dan lukt dat niet met onderstaande query:
code:
1
select * from festivals where 43 in (lokatieids)

43 is dan de lokatieid die ik meegeef vanuit de pagina en lokatieids is het veld van de db waar de waarde bv 12,43,59 instaat. Geef ik echter 12 op dan doet ie het wel. De query vindt dus alleen de eerste waarde in de reeks en niet de extra ids die achter de komma staat.


Ik heb al geprobeerd om de ids op te slaan als '12','43,'59', maar dat maakt niks uit.

  • Noork
  • Registratie: Juni 2001
  • Niet online
Mag ik even opmerken dat dit gewoonweg niet de juiste manier is om te doen. Er zullen gerust oplossingen zijn, maar echt handig is het niet.

Waarom maak je niet een koppeltabel tussen lokaties en festivals? Je kunt op deze manier veel handiger select statements uitvoeren.
b.v. Lokatie_festival -> id, lokatie_id, festival_id

Zie hier voor een discussie waarom het niet goed is, en ook voor een halfbakken oplossing:
[phpMyAdmin] vervang opdracht voor MySQL. Dit gaat welliswaar over het vervangen van een nummer, maar het geeft wel de problematiek aan. Wat als je locatie id 143, 431, 432 enz hebt? Die worden ook geselecteerd als je zoekt naar locatieid 43.

Zoals hieronder wordt gezegd kan het ook met een like statement. Maar dan moet je wel b.v. de zaken gescheiden houden met comma's of puntcomma's o.i.d en dit scheidingsteken ook opnemen in het statement.

[ Voor 54% gewijzigd door Noork op 26-07-2008 16:02 ]


  • djexplo
  • Registratie: Oktober 2000
  • Laatst online: 27-10 15:31
Misschien is Like een optie, vb:
$sql = mysql_query("SELECT * FROM address_book WHERE last_name LIKE 'Stan%'");

Maar het is niet netjes om met comma's meerdere waarden in een veld te zetten. Het is veel netter om een nieuwe table te starten, met iets van "id locatie festival-id" ...

'if it looks like a duck, walks like a duck and quacks like a duck it's probably a duck'


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 22:42

Creepy

Tactical Espionage Splatterer

Maak aub een extra tabel aan i.p.v. te gaan rommelen met likes e.d. Met die extra tabel kan je daarna prima m.b.v. een JOIN je IN gebruiken. Hier op het forum komt nog wel eens met enige regelmaat een kolom langs waar meerdere waarden komma gescheiden worden opgeslagen en dat klopt eigenlijk altijd niet. Als iets zich herhaalt dan zul je hier nagenoeg altijd een extra tabel voor moeten maken. Zoek eens op "normaliseren" en bekijk de SQL FAQ hier eens ;)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Cousin Boneless
  • Registratie: Juni 2008
  • Laatst online: 28-02 12:55
Ik kan zo snel niet zien of er hier idd sprake is van een kolom met komma separated waarden. Volgens mij gaat het hier over een form waarop meerdere lokaties worden gekozen. De aangevinkte lokaties worden op de database losgelaten (de waarden in binnen de IN).
Als ik TS was zou ik vlak voor de mysql_query($sql) even de waarde van $sql op het scherm zetten. Bijvoorbeeld met die($sql) en je ziet waarschijnlijk meteen wat er niet aan klopt.


Edit: Nu ik nog eens lees lijkt het er toch op :X

[ Voor 5% gewijzigd door Cousin Boneless op 26-07-2008 22:30 ]