Partyflock
 
Forumonderwerp · 734303
155x bekeken
Waarschuw beheerder
nu een keer geen php maar MySQL.

ik moet gegevens uit 2 tabellen hebben. Nu gebruik ik soms het volgende:

Select * from tabel_1 AS k, tabel_2 AS m WHERE k.id=$id AND m.blaat=$blaat

Dit kan ik nu niet gebruiken, omdat ik voor 1 tabel geen WHERE commando hoef te gebruiken.

Select * from tabel_1 AS k, tabel_2 AS m WHERE k.id=$id
kan niet, omdat je voor tabel_2 AS m ook een WHERE commando moet gebruiken.

Nu las ik net een artikel op phpfreakz over left joins, en het volgende voorbeeld werd gegeven:

SELECT klanten.voornaam, klanten.achternaam, producten.product FROM klanten, producten WHERE klanten.klanten_id = producten.klant_id;

Ik snap hier geen donder van eigenlijk. Nog voor de FROM gebruikt men producten.product :S

ok, bij dit voorbeeld gebeurd eigenlijk dan het volgende:
SELECT * from producten EN klanten waar klant_ID=$id.

zowel producten als de klanten hebben moeten gesorteerd worden op het zelfde nummer, dus hoef je maar 1 nummer te nemen, bijvoorbeeld $klantnummer.

Maar bij mij heb ik niet de zelfde nummers.

ik wil het volgende:

SELECT * FROM klanten WHERE klantnr=$id
SELECT * FROM producten

Als iemand dit in één SELECT statement kan zetten dan vink dat echt uh... aardig ofzo :D
Waarschuw beheerder
Tijd voor E BOOKS of zo :)

Zie alleen maar PHP MySQL Topics van je :P
Waarschuw beheerder
keb ook een dik PHP book :D
maar das ech moeilijk om te begrijpen.

en mysql heb ik nooit moeilijkheden mee, tot op dit moment.
 
Waarschuw beheerder
donateur
SELECT * FROM klanten WHERE klantnr=$id


Zo met die variable werken kan geloof ik niet... Dat moet anders, zal morgen ff kijken hoe ik dat eens had opgelost. Voor de rest weet ik niet of ik je kan helpen... Maar zal eens kijken of ik je iets opweg kan helpen als niemand eerder al de oplossing gaf ;)
Waarschuw beheerder
donateur
:vaag:
Artiest {SHOWLIST artist 566, 31495}
Waarschuw beheerder
ik wil wel ff kijken voor je.. bwd@rdsgroup.nl, wat je zoekt is inderdaad een left outher join functie
Waarschuw beheerder
Mick, ik de manier waarop ik het schreef is niet goed, maar is meer om duidelijk te maken wat ik wil.

in de volgende regel schrijf ik het wel goed
$query = "SELECT * FROM klanten as K, nagelafwijkingen as M WHERE k.id=$klantnummer";

alleen moet ik * van de nagelafwijkingen hebben.
ik kan ook niet de WHERE functie gebruiken voor nagelafwijkingen
Waarschuw beheerder
Hmm, als ik je een advies mag geven is het om SQL gewoon even goed door te nemen. Een join (left, right, etc. om het even) is gewoon een erg standaard actie en dat zijn dingen die je zonder problemen uit je mouw moet kunnen schudden.

Het principe van een join is dat je een relatie legt tussen 2 tabellen. Je wil data uit een tabel, samengevoegd met data uit een andere tabel. Uiteraard moet je dan een relatie aangeven tussen beide tabellen, vaak doe je dit door in je ontwerp primary en foreign keys aan te geven.

SELECT klanten.voornaam, klanten.achternaam, producten.product FROM klanten, producten WHERE klanten.klanten_id = producten.klant_id;


Deze query is een goed voorbeeld van hoe een simpele join werkt (er zijn meer constructies, maar ik zou het bij deze opzet houden). De query moet je lezen als:

Selecteer de kolommen
voornaam uit de tabel klanten
achternaam uit de tabel klanten
product uit de tabel product
uit de tabellen
klanten
producten
die aan de volgende voorwaarde voldoen
de waarde van klanten_id in de tabel klanten is gelijk aan de waarde van klanten_id in de tabel producten

De join in deze query zit hem in de WHERE clause, waar hij de link legt tussen beide tabellen, namelijk de klant_id. Het klopt ook meteen dat dit in de eerste tabel de primary key zal zijn en in de tweede een foreign key (dan ga ik er even vanuit dat de database goed ontworpen is).

Hetgeen wat jij wil dien je dus als volgt ongeveer te schrijven (kan geen precieze query geven zonder je ontwerp te kennen):

SELECT * FROM klanten, producten WHERE klanten.klantnr = producten.klantnr AND klanten.klantnr = '$id'


NB: Zet zeker de aanhalingstekens om $id in de query, hiermee kan je SQL insertion vulnerabilities voorkomen.

Mocht je deze oplossing niet direct snappen, dan raad ik je met klem aan om je boek over SQL erbij te pakken omdat je dan toch wat basis kennis of databases/SQL mist.
laatste aanpassing
Waarschuw beheerder
kan je niet gewoon een view creeren?? is stukkie simpeler!!!
Waarschuw beheerder
Senort > Een view creeeren voor een simpele query als dit? :S
Waarschuw beheerder
volgens mij is er niks simpeler dan een view creeren.... scheelt weer gezeik met allerlei vervelende queries
Waarschuw beheerder
Dan misbruik je een view imho behoorlijk. Slechts voor enkele queries zijn een view echt nodig, de meeste zijn gewoon in een normale enkele query te verkrijgen.

Mag ik trouwens vragen met welke database software je dan werkt? Sowieso is belangrijk te weten dat pas vanaf MySQL 4.0 views ondersteund worden en er nog altijd een aantal hostingbedrijven zijn die met 3.23.x werken.

Ook qua performance is het niet bepaald efficient om overal een view voor te creeren. Absoluut nofi, maar ik denk dat je toch beter SQL goed kan leren dan overal een view voor te creeren, dat is niet de manier hoe het zou moeten.
Waarschuw beheerder
volgens mij om die view te creeren moet je sowieso dezelfde select-instructie gebruiken, dus je ze eigenlijk alleen een stapje meer. maar het voordeel is dat je als je die gegevens gefilterd heb in die view, daar zelf ook weer uit kan filteren. En natuurlijk voor als je met users gaat werken maar dat terzijde....

En waarom zouden views je database vervuilen? Hij gebruikt er maar 1, en alleen voor deze query.... vond t geen slecht idee!!!

ik werk gewoon me mysql, wist niet dat views pas gebruikt konden worden vanaf versie 4.0....nu wel dus
Waarschuw beheerder
donateur
:/

SELECT * from producten EN klanten waar klant_ID=$id.


SELECT * from producten, klanten where klanten.klant_ID = $id

Is er wel een relationele verbinding tussen producten en klanten?
laatste aanpassing
Waarschuw beheerder
Hoi

Ik heb het op een andere manier opgelost.
Ik heb in de tabel producten een veld erbij gezet genaamt "nummer". nummer heeft standaart de waarde 1.

$query = "SELECT * FROM klanten AS k, producten AS m WHERE k.id='$klantnummer' AND m.nummer=1";

easy, en ik maar moeilijk doen :S
heb nu misschien een slechte database structuur maar ach, het werkt
laatste aanpassing
Waarschuw beheerder
SELECT * from producten EN klanten waar klant_ID=$id.


Ik had GEEN relatie tussen klanten en producten!
Waarschuw beheerder
donateur
Ik had GEEN relatie tussen klanten en producten!


Ook niet via een andere tabel? Dan is er toch iets mis met je database ontwerp lijkt me ;)

heb nu misschien een slechte database structuur maar ach, het werkt


Oke niets gezegd, dat zei je zelf al O:)
Waarschuw beheerder
heb nu misschien een slechte database structuur maar ach, het werkt


Au au au!