login  Naam:   Wachtwoord: 
Registreer je!
 Forum

PHP + MYSQL Select probleempje.

Offline Xafro - 28/12/2008 16:07
Avatar van XafroNieuw lid Hallo sitemasters,

Ik heb een opdracht van school waarin ik mysql en php moet combineren, maar hier hebben wij nog amper les in gehad en het is een eindopdracht van vorig jaar!!

Nou ben ik al een heel eind na een week bezig te zijn en ik ben al op het einde, er gaat alleen 1 ding verschrikkelijk mis en ik zou niet weten wat er mis is met mijn sql query..

Dit is de PHP pagina waarin het mis gaat:

Plaatscode: 63352

Ik heb 3 tabellen:
auto(a_id ,a_merk,a_type,a_kleur,a_bouwjaar,a_opmerking,a_afb1,a_afb2,a_afb3,g_id)

gebruikers(g_id,g_naam,g_user,g_wachtwoord,g_recht)

rating(a_id,g_id,score)

Het probleem:
De query haalt alles uit autos, de namen van de gebruikers uit gebruikers, en haalt de score uit rating waar gebruikers en rating gelijk is aan het a_id wat op die rij behandeld wordt. maar als er GEEN rating is voor die betreffende a_id dan slaat hij de hele regel over en echo'd hij gewoon niets, en echo'd daarna wel de volgende, die WEL een rating vermelding heeft.

Heeft iemand een oplossing zodat de query wel de rijen select die geen rating vermelding in de tabel rating hebben?

Als u vragen heeft over dit probleem laat het me dan direct weten!

Alvast bedankt voor het kijken naar dit probleem!
Groeten, Xafro

4 antwoorden

Gesponsorde links
Offline Gerard - 28/12/2008 18:35
Avatar van Gerard Ouwe rakker Met deze manier van joinen maak je eigenlijk gebruik van een INNER JOIN. Om dit aan de gang te krijgen zal je gebruik moeten maken van een LEFT/RIGHT OUTER JOIN. Omdat je er niet zeker van bent dat bepaalde gegevens dus aanwezig zijn in de andere tabel.
Offline Xafro - 28/12/2008 19:10
Avatar van Xafro Nieuw lid
Gerard schreef:
Met deze manier van joinen maak je eigenlijk gebruik van een INNER JOIN. Om dit aan de gang te krijgen zal je gebruik moeten maken van een LEFT/RIGHT OUTER JOIN. Omdat je er niet zeker van bent dat bepaalde gegevens dus aanwezig zijn in de andere tabel.


Wat wordt dan nu mijn query als ik gebruik ga maken van een LEFT/RIGHT OUTER JOIN??

mijn huidige query is:

$query = "SELECT auto.*,gebruikers.g_naam, AVG(rating.score) AS Rating
FROM rating,gebruikers,auto
WHERE auto.a_id = rating.a_id
AND auto.g_id = gebruikers.g_id
GROUP BY auto.a_id
ORDER BY a_merk,a_type";
Offline Gerard - 28/12/2008 19:33
Avatar van Gerard Ouwe rakker Dat ga ik je natuurlijk niet voorzeggen. ;) Er staan meerdere tutorials op Sitemasters over joins en SQL. Tevens is er nog genoeg te vinden op het internet.

Probeer zelf eens een query te bouwen en als het je aan het einde van de avond nog niet lukt, dan plaats je het resultaat weer hier en dan kijken we met zijn allen wat je dan kan doen.
Offline Xafro - 28/12/2008 20:32 (laatste wijziging 31/12/2008 17:47)
Avatar van Xafro Nieuw lid Hallo, ik heb nu een query gemaakt die wel alle rijen laat zien, maar niet de gegevens uit rating en ook niet de gegevens uit gebruikers.
dus het probleem dat hij de rijen zonder waarde in rating overslaat is opgelost, maar de gegevens haalt hij er niet uit. ook wil ik graag weten hoe ik AVG(rating.score) verwerk in een query samen met een left join.

dit is mijn poging tot het gebruik met LEFT JOIN:
$query = "SELECT auto.* FROM auto
LEFT JOIN gebruikers ON auto.g_id = gebruikers.g_id
LEFT JOIN rating ON auto.a_id = rating.a_id
ORDER BY a_merk,a_type";

Dit was de oude query met AVG(rating.score) er nog in:
$query = "SELECT auto.*,gebruikers.g_naam,
AVG(rating.score) AS Rating
FROM rating,gebruikers,auto
WHERE auto.a_id = rating.a_id
AND auto.g_id = gebruikers.g_id
GROUP BY auto.a_id
ORDER BY a_merk,a_type";

misschien het waard om er even bij te zeggen: Ik ben absoluut geen proffesional op het gebied van sql, en queries uitproberen heeft bij mij bijna nooit resultaat. de huidige oude query heb ik ook met hulp van iemand die er een heel klein beetje verstand van heeft gemaakt.


-------------------------------------------------------------
EDIT: Ik had een fout gemaakt in mijn PHP code, hierdoor liet hij bepaalde resultaten niet zien. dit is opgelost maar ik ben nog niet helemaal verlost van de problemen. Deze query:

$query = "SELECT * FROM auto
LEFT JOIN gebruikers ON auto.g_id = gebruikers.g_id
LEFT JOIN rating ON auto.a_id = rating.a_id
ORDER BY score DESC,a_merk,a_type";

doet precies waar hij voor bedoelt is. Hij haalt alles uit auto, plakt de gebruikers aan de tabel vast aan de rechterkant waar auto.g_id gelijk is aan gebruikers.g_id zodat bij iedere auto de juiste eigenaar wordt weergegeven, ook plakt hij rating er aan vast aan de rechterkant maar omdat op de ene auto nog niet is gestemd en de andere wel heb ik bij de auto waarop niet gestemd is een blanco veld (dit is gewenst!  ) maar bij de autos waar 2x op is gestemd krijg ik 2 rijen voor terug. En waar 3x is gestemd 3 rijen. Nu weet ik dat dit op te lossen is doormiddel van AVG() en/of GROUP BY maar ik krijg de syntax maar niet goed!! zou u mij alstublieft willen helpen door AVG() en GROUP BY in deze query te zetten zodat ik geen dubbele rijen meer krijg??

ik heb al verscheidene dingen geprobeerd zoals:
LEFT JOIN rating.AVG(rating.score) ON auto.a_id = rating.a_id ...

Nog bedankt voor uw vorige reactie waarin u een hint gaf over waar ik moet zoeken!  

Ik heb al heel lang geen reactie meer gehad, kan iemand mij a.u.b helpen??
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.158s