werken met een join
Ik ben bezig met een zoek veld en moet data uit 2 verschillende tabellen halen, moet ik dan werken met een join?.
Dit heb ik al:
Code (php)
1
<php $q = "SELECT * FROM bestellingen WHERE id LIKE '%".$_POST['zoeken']."%' OR klant_id LIKE '%".$_POST['zoeken']."%' OR website LIKE '%".$_POST['zoeken']."%' ORDER BY id DESC "; ?>
Maar uit de tabel 'klanten' moet ik nog op voornaam, achternaam en email kunnen zoeken.
Alvast bedankt voor jullie hulp
Met vriendelijke groet,
Ronnie
Gewijzigd op 28/11/2014 12:07:28 door Ronnie Rijgersberg
je tabellen aan elkaar knopen en dan kun je in de WHERE ook op de kolommen uit klant zoeken.
(Nog wel even de juiste kolomnaam voor klanten.id vinden.)
En pas op je statement is open voor sql-injectie.
In alle 2 de tabellen heb ik een id.
Dan zet je er tabelnaam plus punt voor, zoals in het voorbeeld van Jan: id wordt klanten.id voor de kolom id uit de tabel klanten.
Ik weet niet of je echt wilt zoeken op id, maar zo ja, dan kun je deze vervangen door bestellingen.id.
Dat geldt overigens ook voor alle andere kolommen uit de WHERE clausule. Dus bijv ook bestellingen.website.
Goed gebruik is ook om de SELECT * te vervangen door SELECT en de kolommen die je echt nodig hebt. Dus bijv SELECT bestellingen.id, bestellingen.website, klanten.voornaam etc.
Dank jullie ;)
Toevoeging op 28/11/2014 14:17:32:
Alles doet het maar als ik op zoeken druk word mijn bestellingen id de klant id kan het aan de code liggen die ik net gemaakt heb?
Code (php)
1
<php $q = "SELECT * FROM bestellingen INNER JOIN klanten ON klanten.id = bestellingen.klant_id WHERE bestellingen.id LIKE '%".$_POST['zoeken']."%' OR bestellingen.klant_id LIKE '%".$_POST['zoeken']."%' OR klanten.voornaam LIKE '%".$_POST['zoeken']."%' OR klanten.achternaam LIKE '%".$_POST['zoeken']."%' OR bestellingen.website LIKE '%".$_POST['zoeken']."%' ORDER BY bestellingen.id DESC "; ?>
Maar denk ook eens aan mijn vorige suggesties:
- vervang SELECT *
- en denk aan sql injectie
Maar omdat de kolommen dezelfde naam hebben wordt krijgt ie de waarde van de kolom uit de laatst geselecteerde tabel.
Dus inderdaad de kolommen netjes opgeven in de SELECT en één van de twee (of allebei) een alias geven:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
SELECT
k.id AS klant_id,
b.id AS bestelling_id
FROM
klanten AS k
JOIN
bestellingen AS b
ON ......
k.id AS klant_id,
b.id AS bestelling_id
FROM
klanten AS k
JOIN
bestellingen AS b
ON ......
De as kan overigens in de asbak.
Gewijzigd op 28/11/2014 17:32:54 door Ger van Steenderen