2017-01-13 5 views
0

Ich habe eine Frage zum Hinzufügen von Werten in eine Tabelle. Momentan arbeite ich an einer Anwendung, in der Sie beispielsweise den Lagerbestand eines Werkzeugbaus pflegen können.MySQL-Spalte mit mehreren Werten

<?php 
include 'dbconnect.php'; 

// Stock query 
$sql = "SELECT * FROM product WHERE locationcode = 'loc1'"; 
$result = $conn->query($sql); 

if ($result->num_rows > 0) { 
    // output data of each row 
    while($row = $result->fetch_assoc()) { 
     echo "<tr>"; 
     echo "<td>".$row['locationcode']."</td>"; 
     echo "<td>".$row['product_id']."</td>"; 
     echo "<td>".$row['amount']."</td>"; 
    } 
} 
else { 
    echo "0 results"; 
} 

$conn->close(); 

Die Tabelle, die ich für die Produkte der folgenden Spalten besteht aus:
- ID Produkt
- Produkttyp
- Marke
- Modell
- Kostenpreis
- Verkaufspreis
- Standortcode
- Menge

Viele Produkte aus diesem Werkzeugladen sind an mehreren Standorten erhältlich (es gibt mehrere physische Geschäfte im ganzen Land).

Ist es möglich, mehr als 1 Wert in eine Spalte hinzuzufügen? Dies liegt daran, dass der Client in der Lage sein sollte, nach Produkten und den entsprechenden Standorten zu filtern (IE. Ein Produkt kann sowohl an Standort 1 als auch an Standort 2 verfügbar sein).

Vielen Dank im Voraus!

+2

Siehe Normalisierung. – Strawberry

Antwort

2

Ich würde dringend empfehlen, mehr als einen Wert in eine Spalte, z. mit CSV hier. Erstellen Sie stattdessen eine neue Tabelle, z. B. product_locations, die eine Spalte für die Produkt-ID und eine weitere Spalte für die Standort-ID enthält.

Zum Beispiel, wenn Produkt 1 nur in Position erschienen 1 und Produkt 2 erschien in beiden Orten 1 und 2, würde die Tabelle wie folgt aussehen:

ProductID | LocationID 
    1  |  1 
    2  |  1 
    2  |  2 

Beachten Sie, dass, wenn Sie die Notwendigkeit, Anzeige alle Orte eines bestimmten Produkts, Sie könnten immer die obige Tabelle mit GROUP_CONCAT, z

SELECT ProductID, GROUP_CONCAT(LocationID) AS locations 
FROM product_locations 
GROUP BY ProductID