werken met een join

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ronnie Rijgersberg

Ronnie Rijgersberg

28/11/2014 12:04:02
Quote Anchor link
Goedenmiddag,

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)
PHP script in nieuw venster Selecteer het PHP script
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
 
PHP hulp

PHP hulp

16/11/2024 18:54:15
 
Jan de Laet

Jan de Laet

28/11/2014 12:14:45
Quote Anchor link
Je kunt dmv
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
SELECT *
FROM bestellingen
JOIN klanten ON klanten.id = bestellingen.klant_id

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.
 
Ronnie Rijgersberg

Ronnie Rijgersberg

28/11/2014 12:28:04
Quote Anchor link
Ik krijg een error:Column 'id' in where clause is ambiguous.

In alle 2 de tabellen heb ik een id.
 
Ward van der Put
Moderator

Ward van der Put

28/11/2014 13:22:47
Quote Anchor link
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.
 
Jan de Laet

Jan de Laet

28/11/2014 13:24:40
Quote Anchor link
Dat komt omdat je in de WHERE id hebt staan.
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.
 
Ronnie Rijgersberg

Ronnie Rijgersberg

28/11/2014 13:24:57
Quote Anchor link
Oke top het is gelukt

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)
PHP script in nieuw venster Selecteer het PHP script
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 "; ?>
 
Jan de Laet

Jan de Laet

28/11/2014 16:59:12
Quote Anchor link
En als je, daar waar je met het resultaat van de query gaat werken, id eens vervangt door bestellingen.id.

Maar denk ook eens aan mijn vorige suggesties:
- vervang SELECT *
- en denk aan sql injectie
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

28/11/2014 17:32:32
Quote Anchor link
Wat er gebeurd bij het fetchen is dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$row
['kolomnaam'] = kolomwaarde;
?>

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)
PHP script in nieuw venster Selecteer het PHP script
1
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 ......

De as kan overigens in de asbak.
Gewijzigd op 28/11/2014 17:32:54 door Ger van Steenderen
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.