Query met 3 tabellen lukt niet

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Racoon smasher

racoon smasher

18/04/2014 16:59:41
Quote Anchor link
Het lukt me maar niet om 3 tabellen te pakken en de nodige informatie eruit te halen

Deze query werkt niet bij mij:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
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
Gewijzigd op 18/04/2014 17:05:44 door Racoon smasher
 
PHP hulp

PHP hulp

18/04/2024 15:33:37
 
Ivo P

Ivo P

18/04/2014 17:03:31
Quote Anchor link
werkt niet als in "ik krijg foutmelding", of als "geeft verkeerde resultaten"?
 
Racoon smasher

racoon smasher

18/04/2014 17:04:02
Quote Anchor link
Ivo P op 18/04/2014 17:03:31:
werkt niet als in "ik krijg foutmelding", of als "geeft verkeerde resultaten"?


ow sorry, ja bedoel dat ik foutmelding krijg
 
Ivo P

Ivo P

18/04/2014 17:06:20
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
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


Maar je hebt een jaartal in een kolom y_id opgeslagen???
 
Racoon smasher

racoon smasher

18/04/2014 17:07:00
Quote Anchor link
ja maar het is wel een varchar en geen auto increment dus dat maakt niet uit

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
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


still error :(
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\wamp\www\linkbuilding\beta\check.php on line 19
Gewijzigd op 18/04/2014 17:08:13 door racoon smasher
 
- Ariën  -
Beheerder

- Ariën -

18/04/2014 17:33:55
Quote Anchor link
Wat zegt mysql_error()?
 
Pipo Clown

Pipo Clown

18/04/2014 17:36:29
Quote Anchor link
Meestal is dit een gevolg van een MySQL-error, heb je daar al naar gekeken ?
 
Racoon smasher

racoon smasher

22/04/2014 09:17:31
Quote Anchor link
Die zegt dus dit:

Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\wamp\www\linkbuilding\beta\check.php on line 19

Btw sorry voor late reactie
 
Ivo P

Ivo P

22/04/2014 09:23:35
Quote Anchor link
dat is de php error die volgt omdat in mysql_query() een fout optrad en je gewoon doorgaat.

Zoiets als "ik heb een zere neus", omdat de functie "doe de deur open" mislukt en je na aanroep doedeuropen() gewoon begint te lopen.

http://www.pfz.nl/wiki/mysql-foutafhandeling-in-php/
 
Racoon smasher

racoon smasher

22/04/2014 09:34:07
Quote Anchor link
Query was empty () krijg ik bij de query:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
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


Toevoeging op 22/04/2014 09:35:21:

Racoon smasher op 22/04/2014 09:34:07:
Query was empty () krijg ik bij de query:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
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 bij die van mezelf zelfde error
 
Ivo P

Ivo P

22/04/2014 09:36:08
Quote Anchor link
aangezien dat hierboven niet leeg is, zal het wel aan de php er omheen liggen...
 
Racoon smasher

racoon smasher

22/04/2014 09:38:46
Quote Anchor link
Dan zou ik niet weten wat, want bij me vorige query waar ik 2 tabellen selecteerde deed hij het wel.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?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)
Gewijzigd op 22/04/2014 09:49:17 door racoon smasher
 
Erwin H

Erwin H

22/04/2014 11:22:56
Quote Anchor link
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?
 
Ivo P

Ivo P

22/04/2014 11:25:07
Quote Anchor link
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.
 
Racoon smasher

racoon smasher

22/04/2014 11:28:46
Quote Anchor link
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
 
Ivo P

Ivo P

22/04/2014 11:33:23
Quote Anchor link
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
 
Racoon smasher

racoon smasher

22/04/2014 11:34:46
Quote Anchor link
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:
Afbeelding

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?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
Afbeelding
 
Erwin H

Erwin H

22/04/2014 11:42:42
Quote Anchor link
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!
 
Racoon smasher

racoon smasher

22/04/2014 11:49:21
Quote Anchor link
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?
 
Erwin H

Erwin H

22/04/2014 11:51:26
Quote Anchor link
Come on...
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
while ($queryFetch = mysql_fetch_array($querySelect))
?>

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

racoon smasher

22/04/2014 11:52:59
Quote Anchor link
Erwin H op 22/04/2014 11:51:26:
Come on...
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?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?
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.