Door
racoon smasher
op 18-04-2014 16:59
gewijzigd op 18-04-2014 17:05
2.970 views
Het lukt me maar niet om 3 tabellen te pakken en de nodige informatie eruit te halen
Deze query werkt niet bij mij:
SELECT * FROM companies,
relationship_managers,
linkbuilding
WHERE relationship_managers.rm_id = companies.rm_id
AND linkbuilding.c_id = companies.c_id
AND c_invisibility = 0
AND y_id = YEAR() /* y_id is bijvoorbeeld 2013 of 2014 en ik wil dat die alleen tabellen van dit jaar weergeeft */
ORDER BY c_id DESC
Weet iemand hoe ik het beter kan doen?
ik krijg namelijk een foutmelding:
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\wamp\www\linkbuilding\beta\check.php on line 19
Dan zou ik niet weten wat, want bij me vorige query waar ik 2 tabellen selecteerde deed hij het wel.
<?php
$querySelect = "SELECT *
FROM companies
JOIN relationship_managers ON relationship_managers.rm_id = companies.rm_id
JOIN linkbuilding ON linkbuilding.c_id = companies.c_id
WHERE 1=1
AND c_invisibility = 0
AND y_id = YEAR(NOW())
ORDER BY c_id DESC";
$rResult = mysql_query($querySelect, $con);
if($rResult === false)
{
echo("Er ging iets fout met de query: ".mysql_error($con)." (".$querySelect.")");
}
else
{
echo "<div class='table'><table id='table'><tr><td>Bedrijf</td><td>Relatie beheerder</td></tr>";
while ($queryFetch = mysql_fetch_array($querySelect))
{
echo "<tr style='display: table-row;'>";
echo "<td>" . $queryFetch['c_name'] . "</td>";
echo "<td>" . $queryFetch['rm_firstname'] . " " . $queryFetch['rm_surname'] . "</td>";
echo "</tr>";
}
}
echo "</table></div>";
?>
sorry was wat vergeten weg te halen...
de error is:
Er ging iets fout met de query: Column 'c_id' in order clause is ambiguous (SELECT * FROM companies JOIN relationship_managers ON relationship_managers.rm_id = companies.rm_id JOIN linkbuilding ON linkbuilding.c_id = companies.c_id WHERE 1=1 AND c_invisibility = 0 AND y_id = YEAR(NOW()) ORDER BY c_id DESC)
En dan weet je meteen 1 van de redenen waarom het altijd wordt afgeraden om SELECT * te gebruiken in plaats van het benoemen van je kolommen.
Wat er nu gebeurt is dat je in meerdere tabellen c_id hebt als kolom en de database server weet nu meer welke je wilt gebruiken in 'ORDER BY c_id DESC'. Dus
1) altijd tabellen erbij zetten zoals je bij de joins wel doet
2) geen SELECT * gebruiken, want als je nu de c_id kolom uitleest in je resultset, uit welke tabel komt die dan?
De fout blijft idd staan, maar er wordt toch gezegt: FROM companies
kan ik dan niet beter iets bij ORDER BY c_id neer zetten waardoor hij weet van welke tabel?
c_id staat alleen in de tabellen companies en linkbuilding