inner join
Ik ben een beginneling op het gebied van PHP en MYSQL, dus mijn vragen zijn mischien voor de meesten heel simpel.
Toch stel ik hulp op prijs.
Ik heb een database met een aantal tabellen, maar het gaat hier even om 2
De tabellen zijn wed_scores en namen.
wed_scores:
id int(10) UNSIGNED No None AUTO_INCREMENT
id_locatie int(10) No None
id_wed int(10) No None
date date No None
time time No None
duur time No None
id_naam1 int(10) No None
id_naam2 int(10) No None
punten1 int(10) UNSIGNED No None
punten2 int(10) No None
max_br1 int(10) UNSIGNED No None
max_br2 int(10) No None
aantal_br1 int(10) UNSIGNED No None
aantal_br2 int(10) No None
tot_br1 int(10) UNSIGNED No None
tot_br2 int(10) No None
tot_foul1 int(10) UNSIGNED No None
tot_foul2 int(10) No None
en namen:
id int(10) UNSIGNED No None AUTO_INCREMENT
naam varchar(30) latin1_swedish_ci No None
club varchar(30) latin1_swedish_ci No None
id_naam1,id_naam2 verwijzen naar de tabel namen
PHP Code
De Query die ik gebruik is:
$sql = "SELECT $sql_str FROM wed_scores WHERE '$id_wed' = wed_scores.id_wed
INNER JOIN namen AS join1 ON wed_scores.id_naam1=namen.id
INNER JOIN namen AS join2 ON wed_scores.id_naam2=namen.id
ORDER BY wed_scores.date,wed_scores.time DESC";
Vraag1: Wat is hier fout
Vraag 2: is dit de beste manier om dit te doen?
Gewijzigd op 08/02/2011 11:15:26 door De boer
Gewijzigd op 07/02/2011 20:21:38 door Noppes Homeland
Ik heb het volgende nu geprobeerd:
$sql = "SELECT $sql_str FROM wed_scores,namen
INNER JOIN namen AS join1 ON namen.id=wed_scores.id_naam1
INNER JOIN namen AS join2 ON namen.id=wed_scores.id_naam2
WHERE '$id_wed' = wed_scores.id_wed
ORDER BY wed_scores.date,wed_scores.time DESC";
Met als resultaat:
1054: Unknown column 'wed_scores.id_naam1' in 'on clause'
SELECT wed_scores.date, wed_scores.time, wed_scores.duur, namen.naam, namen.naam, wed_scores.punten1, wed_scores.punten2, wed_scores.max_br1, wed_scores.max_br2, wed_scores.tot_br1, wed_scores.tot_br2, wed_scores.aantal_br1, wed_scores.aantal_br2, wed_scores.tot_foul1, wed_scores.tot_foul2 FROM wed_scores,namen
INNER JOIN namen AS join1 ON namen.id=wed_scores.id_naam1
INNER JOIN namen AS join2 ON namen.id=wed_scores.id_naam2
WHERE '1' = wed_scores.id_wed
ORDER BY wed_scores.date,wed_scores.time DESC
Terwijl (ook uit de listing van de structuur van wed_scores overduidelijk blijkt dat wed_scores.id_naam1 wel bestaat.
Toevoeging op 07/02/2011 21:51:56:
Is er geen eenvoudiger manier? Of is het gebruik van deze JOIN's normaal in dergelijke gevallen?
letop mysql injectie !
Oww, sorry, hoe doe ik dat volgende keer?
Jordi kroon op 07/02/2011 22:01:51:
letop mysql injectie !
Dit kan je niet zo stellen. Er is wel een kans op.
De boer op 07/02/2011 22:11:33:
Oww, sorry, hoe doe ik dat volgende keer?
Gebruikers kunnen je systeem hacken als het mogelijk is om data direct in een query te stoppen.
Dus bijvoorbeeld: SELECT id FROM users WHERE username=$_POST['username']
Om dat te voorkomen gebruik je mysql_real_escape_string.
Toevoeging op 07/02/2011 22:50:13:
Maar.....
Kan iemand de foutmelding:
1054: Unknown column 'wed_scores.id_naam1' in 'on clause'
zoals boven genoemd, verklaren? Die column bestaat nl wel
"wed_scores.id_naam1" bestaat niet omdat er geen tabel "wed_scores" bestaat maar een tabel "wedscores".
De tabel heet dus echt wed_scores en de kollommen id_naam1 en id_naam2 bestaan
Overigens is opmerkelijk dat de foutmelding:
1054: Unknown column 'wed_scores.id_naam1' in 'on clause'
verwijst naar de on clause terwijl de kollom al eerder wordt genoemd in de SELECT gedeelte.
Toevoeging op 08/02/2011 23:13:49:
Hoi Allen,
Heb veel nuttige tips gekregen maar het was nog niet opgelost.
Ben al wel wat verder
Ik heb dus 2 inner joins nodig
Maar de onderstaande code werkt wel voor 1 join
$sql = "SELECT
'wed_scores.date','wed_scores.time','wed_scores.duur','namen.naam','namen.naam',
'wed_scores.punten1','wed_scores.punten2','wed_scores.max_br1','wed_scores.max_br2','wed_scores.tot_br1',
'wed_scores.tot_br2','wed_scores.aantal_br1','wed_scores.aantal_br2','wed_scores.tot_foul1','wed_scores.tot_foul2'
FROM wed_scores
INNER JOIN namen ON wed_scores.id_naam1=namen.id";
// zoiets heb ik nodig INNER JOIN namen ON wed_scores.id_naam2=namen.id
Iedere advies hulp wordt zeer op prijs gesteld