2010-12-09 5 views
0

diese Website ist wie eine E-Commerce-Website, und ich habe zwei Tabellen, auf denen ich feststecke.wie Tabellenrekorder angezeigt werden, die einen Datensatz haben, wenn eine andere Tabelle, die verbunden ist, hat viele Datensätze

tbl_products 
--------------- 
phash 
product 
price 
desc 
maxcount 


tbl_product_images 
------------------- 
phash 
thumb 
large 

tbl_products speichert die Beschreibung Produkte tbl_product_images speichert den Pfad des Daumens und große Bild von eac Produkt.

phash ist ein md5 der produkte name ist das, was ich benutze eher als die id oder produktname beim zusammenpassen dinge zusammen.

was ich habe through mit ist sagen tbl_products hat einen Datensatz für ein Produkt und tbl_product_images in Bezug auf dieses Produkt hat 5 Zeilen für seine Bilder.

Wie würde ich die Abfrage ausführen?

$sql = "select 
    tbl_products.phash 
    tbl_products.product 
    tbl_products.price 
    tbl_products.desc 
    tbl_products.maxcount 
    tbl_product_images.phash 
    tbl_product_images.thumb 
    tbl_product_images.large 
    from tbl_products 
    inner join tbl_product_images 
    on tbl_products.phash = tbl_products_images.phash"; 

Dies zeigt 5 Zeilen von Datensätzen an, seit tbl_product_images 5 Datensätze hat.

die Art und Weise i Ausgang ist meine traditionelle Art und Weise

$query = $db->query("$sql"); 
while($row = $db->fetch($query)) 
{ 
.... 

} 

ich wirklich nicht sicher bin, wie ich dies tun werde, wenn Sie mehr Erklärung benötigen, was ich versuche, mir zu erklären, lassen Sie es wissen.

dank
+0

Was erwarten Sie für die Ausgabe? Du bekommst Duplikate aus TBL_PRODUCT_IMAGES –

Antwort

0

Der einfachste Weg ist die Anzahl der Ergebnisse aus der Bilder-Tabelle kommt zu begrenzen - obwohl das nur angemessen ist, wenn Sie kümmern sich nicht, welches Bild wird für jedes Produkt zurückgegeben:

select 
    tbl_products.phash 
    tbl_products.product 
    tbl_products.price 
    tbl_products.desc 
    tbl_products.maxcount 
    tbl_product_images.phash 
    tbl_product_images.thumb 
    tbl_product_images.large 
    from tbl_products 
    inner join (SELECT * FROM tbl_product_images LIMIT 1) images 
    on tbl_products.phash = images.phash 

Sie können eine hinzufügen ORDER BY [col] DESC zu dieser LIMITed-Abfrage, wenn es eine andere Spalte in der Bildtabelle gibt (wie ein Datum), mit der Sie ermitteln können, welches Bild angezeigt wird.

(Anmerkung: Wenn es in tbl_product_images einige Spalt waren, die die Bild bestimmt zurückkehren, entweder könnten Sie, dass in einer WHERE Klausel auf der Abfrage setzen, oder ist es in den Kriterien verbinden, wie: ON tbl_products.phash = tbl_product_images.phash AND tbl_product_images.color = 'Blue')

Weiter, wenn Sie versuchen, ein Produkt mit all seinen Bildern zu bekommen, aber nur eine Zeile in der Ergebnismenge wollen, kann es möglich sein, den Satz von Bildern in Spalten zu "schwenken". Dies ist jedoch schwierig, wenn Sie eine beliebige (oder einfach große) Anzahl von Bildern pro Produkt haben können. Sie können besser nur mehrere Zeilen pro Produkt zurückgeben und die Ergebnisse in Ihrem Anwendungscode behandeln ...

+0

Auch aus Neugier: Warum verwenden Sie einen MD5-Hash als Fremdschlüssel anstelle einer Produkt-ID? –

+0

bleib dran dj ich werde es dir erklären. Ich muss jemanden fallen lassen. es ist viel besser, das hash als die id meiner meinung nach zu sehen. –

+1

Ich warte mit angehaltenem Atem. :) –

Verwandte Themen