php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2004

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 13.09.2004, 15:43  
Gast
 
Beiträge: n/a
Standard JOIN spinnt?!

ich hab folgendes Problem.

Ich habe 2 Tabellen: mycar, und mycarpics
in mycarpics sind alle Bilder gespeichert + die id des eigentümers.
in mycar sind die angaben zum fahrzeug gespeichert.

Ich habe nun eine SQL-Abfrage gestartet, in der pro Eintrag in mycar das dazugehörige fahrzeugfoto ausgelesen werden soll

Die Abfrage sieht so aus:
PHP-Code:
$sql "SELECT mycar.id, mycar.fahrzeug, mycarpics.pic FROM mycar LEFT JOIN mycarpics ON mycar.mid = mycarpics.mid WHERE mycar.mid = $_GET[id]";
$result mysql_query($sql,$dbh); 
Wenn ich nun die Anzahl zutreffender Einträge von mycarpics ausgeben (mysql_num_rows($result)), dann gibt er mir 9 Einträge aus obwohl nur 3 gespeichert sind. Dass heisst irgendwie wird die Anzahl Einträge immer mit sich selber multipliziert...

Weiss jemand woran das liegen könnte?!
 
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 13.09.2004, 16:00  
Gast
 
Beiträge: n/a
Standard

Kann ich Dir zwar nicht sagen, aber vielleicht hilft es Dir, die Abfragen mal auseinander zu ziehen und die Einzelergebnisse zu betrachten.
Vielleicht meckert ja auch mysql über die Abfrage -> mehr Fehlerbehandlung einbauen.
PHP-Code:
<?php
ini_set
('display_errors'true);
error_reporting(E_ALL);
// mysql-Verbindung, select_db

$sql "SELECT mycar.mid FROM mycar WHERE mycar.mid = $_GET[id]";
$result mysql_query($sql,$dbh)
        or die(
$sql.': '.mysql_error());
echo 
'mycar: 'mysql_num_rows($result), "
\n"
;

$sql "SELECT mycarpics.mid FROM mycarpics WHERE mycarpics.mid = $_GET[id]";
$result mysql_query($sql,$dbh)
        or die(
$sql.': '.mysql_error());
echo 
'mycarpics: 'mysql_num_rows($result), "
\n"
;

$sql "
    SELECT
        mycar.id, mycar.fahrzeug, mycarpics.pic
    FROM mycar
    LEFT JOIN mycarpics
    ON mycar.mid = mycarpics.mid
    WHERE mycar.mid = $_GET[id]
"
;

$result mysql_query($sql,$dbh)
        or die(
$sql.': '.mysql_error());
echo 
'join: 'mysql_num_rows($result), "
\n"
;
?>
 
Alt 13.09.2004, 16:11  
Gast
 
Beiträge: n/a
Standard

danke..
Seitens MYSQL ist alles ok..

Meine neuste Erkenntnis ist nun, das für jedes Fahrzeug, alle Bilder angezeigt werden statt nur das zutreffende..
Hm.. es muss also irgendwo an der SQL-syntax liegen...
 
Alt 13.09.2004, 17:42  
Gast
 
Beiträge: n/a
Standard

oder liegt es vieleicht daran, dass ich die Datensätze mit
PHP-Code:
while($row mysql_fetch_array($result)){ 
ausgebe?
Muss man da vieleicht ne andere Schleife verwenden?!
 
Alt 14.09.2004, 10:19  
Erfahrener Benutzer
 
Benutzerbild von lazydog
 
Registriert seit: 02.04.2008
Beiträge: 4.032
lazydog befindet sich auf einem aufstrebenden Ast
Standard

Mir ist schon mal nicht klar, warum du hier zwei Tabellen brauchst. Die haben ja eine 1:1-Beziehung, die Daten könnten alle in einer Tabelle stehen. Wenn du sie aber so lassen willst, benutze einen INNER JOIN anstelle des LEFT JOINS
__________________
Gruss
L
lazydog ist offline  
Alt 14.09.2004, 14:47  
Gast
 
Beiträge: n/a
Standard

Ich benutze 2 Tabellen, da zu einem Fahrzeug mehere Bilder hinaufgeladen werden können..

Vielen Dank für dein Tip!
Leider funktioniert es immer noch nicht..
Jetzt werden einfach zuerst die verschiedenen Bilder angezeigt mit jeweils dem gleichen Autonamen.. Und das für jedes Auto.. Also genau umgekehrt wie vorhin..
 
Alt 14.09.2004, 14:58  
Erfahrener Benutzer
 
Benutzerbild von lazydog
 
Registriert seit: 02.04.2008
Beiträge: 4.032
lazydog befindet sich auf einem aufstrebenden Ast
Standard

In diesem Fall ist die Syntax eigentlich korrekt. Lass doch deine Abfrage mal ausgeben, bevor du sie ausführst:
PHP-Code:
$sql "SELECT mycar.id, mycar.fahrzeug, mycarpics.pic 
    FROM mycar 
    LEFT JOIN mycarpics ON mycar.mid = mycarpics.mid 
    WHERE mycar.mid = $_GET[id]"
;
echo 
"$sql
# Zum Testen
$result mysql_query($sql) or die(mysql_error()); 
Dann siehst du auch, was in $_GET[id] steht.
__________________
Gruss
L
lazydog ist offline  
Alt 14.09.2004, 17:21  
Gast
 
Beiträge: n/a
Standard

SOORRRYYY

Ich idiot hab vergessen bei ON auch noch
PHP-Code:
mycar.id mycarpics.carid 
anzuhängen!

Also für all jene die die Lösung wissen wollen:
Die richtige Syntax lautet:
PHP-Code:
$sql "SELECT mycar.id, mycar.fahrzeug, mycarpics.pic FROM mycar LEFT JOIN mycarpics ON mycar.mid = mycarpics.mid AND mycar.id = mycarpics.carid WHERE mycar.mid = $_GET[id]"
Danke für deine Hilfe
 
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Mehrfach Join lazydog Datenbanken 2 08.05.2008 16:09
Frage zu meinem JOIN Statement Benjamin Such Datenbanken 4 12.04.2008 13:20
JOIN Problem pPanther Datenbanken 7 06.03.2008 17:26
[gelöst]LEFT JOIN, DINSTINCT und trotzdem doppelte?!?! stefanjann Datenbanken 10 06.02.2008 11:49
JOIN / LEFT JOIN und Co prinzli Datenbanken 12 05.11.2007 22:15
SQL-Frage zum JOIN micbur Datenbanken 2 16.11.2006 23:46
Join auf 2 verschiedene Felder Tommek Datenbanken 6 25.07.2006 20:39
JOIN problem 2 tabellen - zeile(tab1) zu spalte(tab2) Ministry Datenbanken 7 31.05.2006 10:31
Problem mit Inner join Jabi Datenbanken 15 09.05.2006 14:10
INNER JOIN + Suchkriterien + Abfrage duerov PHP Tipps 2006 4 04.04.2006 12:47
inner join zeigt gleiche spalten nur 1x Datenbanken 3 22.02.2006 17:11
inner join aus db PHP Tipps 2006 8 22.01.2006 01:23
Select Problem Datenbanken 17 16.01.2006 21:54
[Erledigt] Abfrageproblem mit Inner Join Datenbanken 15 29.11.2005 18:17
[Erledigt] Join Datenbanken 15 09.03.2005 08:44


Alle Zeitangaben in WEZ +2. Es ist jetzt 03:53 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.