php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger

PHP Einsteiger PHP Problemlösungen für Spracheinsteiger
Archive: 2004, 2004/2, 2005, 2005/2, 2006, 2007, 2008, 2009,

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 01.09.2009, 23:55   #1 (permalink)
Erfahrener Benutzer
 
Registriert seit: 02.02.2009
Beiträge: 378
fulltilt befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] Loop (join) 3 Tabellen

hier geht es um eine Abfrage über 3 Tabellen, ich konnte das zwar lösen aber bin mir nicht sicher ob das wirklich o.k. ist (zweites query).
Kann man das so lassen oder gibt es eine bessere Lösung?
PHP-Code:
   $query "SELECT t1.*,t2.* FROM products as t2, categories as t1 WHERE Category=$cid AND  t2.Category = t1.id ORDER BY Price ASC $limstring";
   
$result mysql_query($query);  
  
   while (
$row mysql_fetch_array($result))
    {
       
   
$img $row["ImageURL"];
   
$titel $row["ProductName"];
   
$titel2 substr($titel,0,12) . ' ...';
   
$cid2 $row["id"];
   
$price $row["Price"];
   
$brand $row["Brand"];
   
$currency $row["Currency"];
   
$des $row["ProductDescription"];
   
$catname $row["cat"];
   
$mid $row["merchantid"];
   
   
$sql2 mysql_query("SELECT id, logo FROM merchant WHERE id=$mid");
   
$res2 mysql_fetch_array($sql2);
   
$merchlogo $res2["logo"]; 
fulltilt ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 02.09.2009, 00:08   #2 (permalink)
Erfahrener Benutzer
 
Registriert seit: 28.08.2009
Beiträge: 233
PHP-Kenntnisse:
Anfänger
Steve befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von fulltilt Beitrag anzeigen
hier geht es um eine Abfrage über 3 Tabellen, ich konnte das zwar lösen aber bin mir nicht sicher ob das wirklich o.k. ist (zweites query).
Kann man das so lassen oder gibt es eine bessere Lösung?
Anhand des Topics und der Fragestellung weißt du doch selbst, dass das Mist ist und genausogut eine Query reicht, also mach dich über JOINs schlau, du fauler Hund

Einführung in Joins
Steve ist offline   Mit Zitat antworten
Alt 02.09.2009, 00:11   #3 (permalink)
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 3.287
Chriz sorgt für eine eindrucksvolle AtmosphäreChriz sorgt für eine eindrucksvolle AtmosphäreChriz sorgt für eine eindrucksvolle Atmosphäre
Standard

SQL-Abfragen in Schleifen deuten auf ein fehlerhaftes Konzept hin. Frag in der Schleife lieber den Wert ($mid) ab, speicher ihn in einem Array, schreib nach der Schleife ein neues SELECT .. WHERE id IN ($midArrayImploded)) und weis danach die Werte zu.

Zusätzlich sind einfache Zuweisungen ( $img = $row["ImageURL"]; ) in einer Schleife absolut sinnfrei, wenn du sie nicht im Verlauf der Schleife in einen Array speicherst oder direkt ausgibst. Andernfalls wird die Variable beim nächsten Durchlauf überschrieben.
__________________
„Was interessiert mich mein Geschwätz von gestern.“ - Konrad Adenauer
Chriz ist offline   Mit Zitat antworten
Alt 02.09.2009, 12:18   #4 (permalink)
Erfahrener Benutzer
 
Registriert seit: 02.02.2009
Beiträge: 378
fulltilt befindet sich auf einem aufstrebenden Ast
Standard

bin gerade dabei alles in ein Query zu packen, an sich klappt es bis auf die "ID" diese wird nun von der table merchant ausgegeben soll aber von products kommen ...
Was mache ich falsch?
PHP-Code:
$cid $_GET['catid'];

$query "SELECT * FROM products 
LEFT JOIN categories ON(categories.id = products.Category) 
LEFT JOIN merchant ON(products.merchantid = merchant.id) 
WHERE products.Category = '$cid' ORDER BY Price ASC $limstring "

fulltilt ist offline   Mit Zitat antworten
Alt 02.09.2009, 12:25   #5 (permalink)
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 21.192
PHP-Kenntnisse:
Fortgeschritten
nikosch ist ein wunderbarer Anblicknikosch ist ein wunderbarer Anblicknikosch ist ein wunderbarer Anblicknikosch ist ein wunderbarer Anblicknikosch ist ein wunderbarer Anblicknikosch ist ein wunderbarer Anblicknikosch ist ein wunderbarer Anblick
Standard

Das: SELECT *
__________________
--
„Eins ist Fakt: Gescannt wird nackt!“

Privatsphäre 2.0 - Nacktscanner mit Eyetracking.
Unser Flugzeug darf kein geschlechtsfreier Raum sein.
--
nikosch ist offline   Mit Zitat antworten
Alt 02.09.2009, 12:46   #6 (permalink)
Erfahrener Benutzer
 
Registriert seit: 02.02.2009
Beiträge: 378
fulltilt befindet sich auf einem aufstrebenden Ast
Standard

Hm - bekomme immer noch die ID von table merchant:
PHP-Code:
$query "SELECT products.id, products.ProductName, products.Price, products.Currency, products.ImageURL, products.Category, products.ProductDescription, products.merchantid, categories.id, categories.cat, merchant.id, merchant.logo FROM products 
LEFT JOIN categories ON(categories.id = products.Category) 
LEFT JOIN merchant ON(products.merchantid = merchant.id) 
WHERE products.Category = '$cid' ORDER BY Price ASC $limstring "
;

   
$result mysql_query($query);  
   while (
$row mysql_fetch_array($result))
    {
echo 
$row'id' ]; 

Geändert von fulltilt (02.09.2009 um 13:00 Uhr).
fulltilt ist offline   Mit Zitat antworten
Alt 02.09.2009, 13:03   #7 (permalink)
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 21.192
PHP-Kenntnisse:
Fortgeschritten
nikosch ist ein wunderbarer Anblicknikosch ist ein wunderbarer Anblicknikosch ist ein wunderbarer Anblicknikosch ist ein wunderbarer Anblicknikosch ist ein wunderbarer Anblicknikosch ist ein wunderbarer Anblicknikosch ist ein wunderbarer Anblick
Standard

Die liest DU ja auch als letztes aus:

Zitat:
, merchant.id, merchant.logo FROM products
Benutze Aliases.
__________________
--
„Eins ist Fakt: Gescannt wird nackt!“

Privatsphäre 2.0 - Nacktscanner mit Eyetracking.
Unser Flugzeug darf kein geschlechtsfreier Raum sein.
--
nikosch ist offline   Mit Zitat antworten
Alt 02.09.2009, 13:04   #8 (permalink)
Erfahrener Benutzer
 
Registriert seit: 08.04.2009
Beiträge: 300
Creator befindet sich auf einem aufstrebenden Ast
Standard

Las die * immer weg, acuh wenn du wirklich alles aus der Tabelle haben möchtest. Das erhöht die lesbarkeit des Querys enorm.

Um ein wenig Tiparbeit zu sparen kannst du es auch so machen:
PHP-Code:
SELECT cat.id ....

LEFT JOIN categories AS cat ON ..... 
Creator ist offline   Mit Zitat antworten
Alt 02.09.2009, 13:16   #9 (permalink)
Erfahrener Benutzer
 
Registriert seit: 02.02.2009
Beiträge: 378
fulltilt befindet sich auf einem aufstrebenden Ast
Standard

okay, also von der Funktionsweise kann ich das nachvollziehen, aber wie kann ich die ID aus products ans Ende bekommen - da stehe ich auf dem Schlauch
also die ID von products ist nur einmal vorhanden ...

PHP-Code:
LEFT JOIN merchant ON(products.merchantid merchant.idWHERE products.Category '$cid' 
Zitat:
Zitat von nikosch Beitrag anzeigen
Die liest DU ja auch als letztes aus:
Benutze Aliases.
fulltilt ist offline   Mit Zitat antworten
Alt 02.09.2009, 13:19   #10 (permalink)
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 21.192
PHP-Kenntnisse:
Fortgeschritten
nikosch ist ein wunderbarer Anblicknikosch ist ein wunderbarer Anblicknikosch ist ein wunderbarer Anblicknikosch ist ein wunderbarer Anblicknikosch ist ein wunderbarer Anblicknikosch ist ein wunderbarer Anblicknikosch ist ein wunderbarer Anblick
Standard

Zitat:
Benutze (Spalten-)Aliases.
__________________
--
„Eins ist Fakt: Gescannt wird nackt!“

Privatsphäre 2.0 - Nacktscanner mit Eyetracking.
Unser Flugzeug darf kein geschlechtsfreier Raum sein.
--
nikosch ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Antwort


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
[Erledigt] 3 Tabellen verbinden - Join geht nicht Bernd-m Datenbanken 4 20.08.2009 11:59
Persistence Framework #Avedo Software-Design 37 28.03.2009 17:32
[Erledigt] Join über 3 Tabellen BlackPanther Datenbanken 2 11.03.2009 19:56
php join von 2 Tabellen grafik2 PHP Tipps 2008 14 05.09.2008 10:36
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
LEFT OUTER JOIN für mehr als 2 Tabellen ? Alpha Centauri Datenbanken 4 05.04.2006 16:18
3 Tabellen mit JOIN verknüpfen? becks123 Datenbanken 6 13.08.2005 00:05
[gelöst] Daten aus zwei Tabellen, join geht nicht!? PHP Tipps 2005-2 3 14.07.2005 09:50
[Erledigt] Join mit 3 Tabellen Datenbanken 21 16.05.2005 23:20
INNER JOIN mit 4 tabellen ??? Dragon26mFR Datenbanken 5 01.05.2005 18:51
Join aus drei Tabellen Datenbanken 9 04.03.2005 10:02
Join aus 3 Tabellen mit nur einer Verknüpfung? Datenbanken 7 24.09.2004 18:25
Abfrage über 2 Tabellen / Join agrajag Datenbanken 2 14.09.2004 23:05
[Erledigt] Join für Select Count(`id`)-Abfrage über 4 Tabellen Datenbanken 4 10.07.2004 18:32


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:20 Uhr.




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