2010-12-10 1 views
0

Entschuldigung, wenn meine Frage irgendwie keinen Sinn macht, aber ich total verwirrt bin, was ich versuche zu erreichen.wie eine 1-zu-viele-DB-Beziehung abzufragen und die Zeilen korrekt anzuzeigen?

hier sind meine Tabellen.

tbl_products (wenn das Bild kleiner herauskam, rechtsklicken Sie darauf und Blick Bild, um es groß zu sehen.) alt text

tbl_product_images

alt text

grundsätzlich tbl_products hat den Rekord für ein Produkt und seine Beschreibung. und tbl_product_images enthält die Bilder für dieses Produkt. Ich möchte den Produkttitel, die Beschreibung und die Bilder in einem solchen Format anzeigen.

alt text

Problem ist die Abfrage i, das ist geschrieben:

wie diese
select 
tbl_products.dealname, 
tbl_products.desc, 
tbl_products.price, 
tbl_products.discount, 
tbl_product_images.thumb, 
tbl_product_images.large 
from tbl_products 
inner join tbl_product_images 

on tbl_products.pHash = tbl_product_images.pHash where tbl_products.startdate = '2010-12-09'; 

zeigt die Abfrage.

alt text

so, wenn ich brauche so etwas wie dieses i

while($row = mysql_fetch_assoc($query)) 
{ 
    print $row['dealname']; 
    print "<img src='".$row['large']."'>"; 
    //and so on. 
} 

zu schreiben, wird das Produkt angezeigt 4 Mal sehen, da ich für diesen Artikel 4 Bilder haben. Was ist der beste Weg, um das zu erreichen, was ich erreichen möchte? Übrigens, Phash ist eine andere Art von ID. es ist meine Art, eine Produktidentifikation in eine andere Tabelle zu bringen.

Antwort

1

Sie können die Funktion GROUP_CONCAT() in MySQL verwenden, wenn Sie alles in einer Abfrage abrufen möchten, aber Sie müssen die Bildinformationen mit PHP aufteilen.

Hier ist ein Beispiel mit | (pipe) als Trennzeichen zwischen den Dateinamen für Daumen und große Bilder.

Abfrage:

select 
tbl_products.dealname, 
tbl_products.desc, 
tbl_products.price, 
tbl_products.discount, 
GROUP_CONCAT(tbl_product_images.thumb SEPARATOR '|') AS thumbs, 
GROUP_CONCAT(tbl_product_images.large SEPARATOR '|') AS images 
from tbl_products 
inner join tbl_product_images 

on tbl_products.pHash = tbl_product_images.pHash 
where tbl_products.startdate = '2010-12-09' 
group by tbl_products.pHash; 

PHP:

while($row = mysql_fetch_assoc($query)) 
{ 
    print $row['dealname']; 

    // $thumbs = explode('|', $row['thumbs']); 
    $images = explode('|', $row['images']); 
    foreach ($images as $image) { 
     print "<img src='".$image."'>"; 
    } 
} 
+0

wow das ist neu danke –

0

Erstellen Sie Links zu einer Seite, auf der Sie die Details zu einem Produkt anzeigen möchten, indem Sie eine Verknüpfung herstellen und einen qstring-Parameter an die Zeilen von? Phash = $ phash übergeben.

auf der Detailseite:

eine SQL-Abfrage verwenden wie diese:

SELECT 
    tbl_products.dealname, 
    tbl_products.desc, 
    tbl_products.price, 
    tbl_products.discount, 
    tbl_product_images.thumb, 
    tbl_product_images.large 
FROM 
    tbl_products 
INNER JOIN 
    tbl_product_images 
ON 
    tbl_products.pHash = tbl_product_images.pHash 
WHERE 
    tbl_products.pHash = $detailsProductPHash 



$i = 0; 

while($row = mysql_fetch_assoc($query)) 
{ 
    if($i==0) print $row['dealname']; 
    print "<img src='".$row['large']."'>"; 
    $i++; 
    //and so on. 
} 

Von dem, was ich verstehe, Sie wollen nur einmal angezeigt werden Informationen über das Produkt und zeigen die Bilder mehrere Male . Das obige wird erreichen, was Sie wollen.

+0

ich möchte nur die Bilder einzeln anzuzeigen, die auf das Produkt beziehen. Wenn Sie beispielsweise auf eine E-Commerce-Website gehen und auf ein Produkt klicken, wird die Detailseite angezeigt. Heres ein Beispiel. http://www.overstock.com/Office-Furniture/Ergo-Light-Weight-Fabric-Folding-Chair-Pack-of-4/5176079/product.html?IID=prod5176079 –

+0

Versuchen Sie die oben genannten ... beachten Sie die Variablen, die Sie ändern müssen. –

1

Der einfachste und einfachste Weg, dies zu tun, ist zwei Abfragen zu machen: eine für das Produkt, die Ihnen eine Zeile und eine andere für die Fotos, die Sie mehrere Zeilen erhalten wird.

Wenn Sie dies in einer Abfrage versuchen, müssen Sie die Daten duplizieren, die Sie von der Datenbank angefordert haben, um sie zu wiederholen. Das ist dumm.

Verwandte Themen