2010-11-22 6 views
1

Hallo ich bin in einem delima
Angenommen, ich habe 50 Produkte in einer Kategorie, und ich möchte alle Funktionen meiner Produkte bekommen ...
Natürlich ein SQL-Join wird nicht helfen, weil der Beitritt Produktinfo viele Male zurückgeben würde!SQL-Abfragen oder PHP-Code?

Also hier ist die Frage .. was A alle
Holen Sie die Produkteigenschaften in der Kategorie mit einer SQL-Abfrage besser
PLAN ist und dann mit php jede Funktion durchlaufen und es in Artikel setzen.

PLAN B
Für jedes Produkt die Eigenschaften erhalten, indem eine Abfrage

Andere Lösungen akzeptiert ruft!

EDIT

Mein Tabellenschema Umriss ist ..
Eine Tabelle Produkt, die Produktinformationen hat (pro Zeile)
eine Tabelle Merkmale, die Merkmale (Feature id)
Eine Tabelle
für Funktionen Werte hat und eine Tabelle, die Produkte mit ihren Eigenschaften und Werte

+3

sollten Sie mehr auf Ihrem Schema veröffentlichen. Wie sind Ihre Tische organisiert? –

+0

Ja, bitte aktualisieren Sie Ihre Frage mit Ihrem Schema. Ein Join kann tatsächlich nützlich sein, abhängig davon, wie genau Daten organisiert sind und was genau Sie aus den Daten herausholen wollen. –

Antwort

2
$sql1 = "SELECT * FROM products P, ". //don't use star, make sure no fields are overwritten 
     INNER JOIN products_to_features PTF on P.id = PTF.project_id 
     INNER JOIN features F F.id = PTF.feature_id 
     ORDER BY P.id"; 
$r = mysql_query($sql1, $conn); 

$arr = array(); 
$lastProductId = -1; 
while ($row = mysql_fetch_assoc($r)) 
{ 
    if ($row[p_id] != $lastProductId) 
    { 
     $lastProductId = $row['p_id']; 
     $arr['p_id'] = array('productName' => $row['p_name'], 
          'productPrice' = $row['p_price'], 
          'productFeatures' = array(), 
          //other fields from product table); 
    } 
    $arr['p_id']['productFeatures']['f_id'] = array('featureName' => $row['f_name'], blah...); 
} 

Ich weiß nicht, Ihre Felder offensichtlich, und Sie möchten möglicherweise auf feature_values ​​beizutreten, so dass mehr Arbeit sein wird. Sie können Schlüssel/Werte anders machen (dh - Produktnamen als Schlüssel. Feature-Name als Schlüssel mit Feature-Wert als Werte, was auch immer Sie wollen), aber der Punkt ist dies machbar (und empfohlen) in einer Abfrage.

+0

Vielen Dank für Ihre Zeit .. Es gibt eine zusätzliche Tabelle für Funktion Werte .. Würden Sie mir vielleicht sagen, wenn ich eine separate Abfrage machen muss? Nochmals vielen Dank – GorillaApe

+0

nein, Sie immer noch nicht seine nur eine weitere Join ich bin nicht wirklich sicher, wie Ihre Tabelle aussieht, aber ich habe den Eindruck, dass Ihre Produkte zu Features-to-Feature-Werte-Tabelle unnötig ist (wenn das ist was es ist). Es sollte viele zu viele zwischen Produkten und Merkmalswerten geben. Feature-Werte sind eine Instanz eines Feature-Typs. (z. B. - Merkmal 'Geschmack' Merkmal Wert 'Erdbeere'). Sobald die Abfrage abgeschlossen ist, fügen Sie die neuen Werte auf ähnliche Weise zu #arr hinzu.Vielleicht möchten Sie, dass jedes Feature ein Schlüssel für seinen jeweiligen Wert ist –

+0

nur ein paar Tippfehler behoben, und arbeitete in den Feature-Werten –

2

Nicht Plan B.

Was auch immer Sie diese und B können tun sollten Es wurde mit einer oder höchstens zwei Gesamtabfragen (eine für Header, eine für korrekt sortierte Liste von Features + ID-Spalte) durchgeführt. Ob diese Abfrage Plan A oder ein nicht erwähnter Plan C ist, hängt von Ihrer genauen Tabellenstruktur ab, die aus Ihrer Frage nicht klar hervorgeht.

0

Im Allgemeinen gilt: Je weniger Datenbankabfragen Sie durchführen müssen, desto besser. Es hängt stark von Ihrer Tabellenstruktur ab, aber ich würde mit Plan A gehen.

+0

Aber ich führe einen Test und PLAN B war schneller, weiß nicht warum ... – GorillaApe

0

Eine Abfrage in einer Schleife wird die Leistung Ihrer Anwendung erheblich beeinträchtigen. Vermeiden Sie es um jeden Preis.

Zeigen Sie uns das Schema. Es besteht die große Wahrscheinlichkeit, dass eine einzelne SQL-Abfrage Ihr Problem löst.

Verwandte Themen