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?
en dat die voor alle 2 of 3 tabellen dezelfde waarde zou hebben, is iets dat je database nog niet weet

Toevoeging op 22/04/2014 11:26:12:

ik denk trouwens dat de fout zou blijven bestaan, als alleen SELECT * wordt aangepast.
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
ORDER BY companies.c_id

Net als een paar regels hoger in de query bij ON ook gebruikt wordt.

En zo pas je dat het liefst ook toe in het stuk SELECT


SELECT companies.c_id , companies.foo, linkbuilding.bar
is die FROM companies dan nog wel nodig?

Toevoeging op 22/04/2014 11:42:14:

Ik krijg geen errors meer van mysql error, maar nog wel deze:



<?php
$querySelect = "SELECT companies.c_id, companies.c_name 
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 companies.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>";
?>


hier mijn database normalisatie overzicht
Ivo P op 22/04/2014 11:25:07

ik denk trouwens dat de fout zou blijven bestaan, als alleen SELECT * wordt aangepast.

Daarom stond er ook een punt 1) bij....



Toevoeging op 22/04/2014 11:43:33:

Je moet in de fetch_array functie natuurlijk geen query meegeven, maar het resultaat van de query!
Erwin H op 22/04/2014 11:42:42


Toevoeging op 22/04/2014 11:43:33:

Je moet in de fetch_array functie natuurlijk geen query meegeven, maar het resultaat van de query!


sorry ik begrijp je niet, kan je het miss uitleggen?
Come on...

<?php
while ($queryFetch = mysql_fetch_array($querySelect)) 
?>

Je geeft hier nu ee string aan de fetch functie, dat kan toch niet kloppen, of wel?
Erwin H op 22/04/2014 11:51:26

Come on...

<?php
while ($queryFetch = mysql_fetch_array($querySelect)) 
?>

Je geeft hier nu ee string aan de fetch functie, dat kan toch niet kloppen, of wel?


Nou zo heb ik het geleerd en heeft altijd gewerkt?

Reageren