2016-11-14 2 views
0

Ich konnte nicht herausfinden, wie diese lösen:Array speichert nur einen Wert anstelle von mehreren

Datenbank:

+-------+-------------+------+ 
| id | ArticleNr | Size | 
+-------+-------------+------+ 
| 1  | AN111  | L | 
| 2  | AN111  | XL | 
| 3  | AN222  | M | 
+-------+-------------+------+ 
sql = "SELECT * FROM table GROUP BY article_number" 
$result = $site_db->query($sql); 
my_array = array(); 

while ($row = $site_db->fetch_array($result)) { 
    $article_number = $row['article_number']; 
    $size = $row['size']; 
    $my_array[${'article_number'}] .= $row['size']; 
} 

Als Ergebnisse, die ich diese bekam:

AN111: L
AN222: M

Jedoch habe ich so etwas wie dies wollen:

AN111: L - XL
AN222: M

Jede Hilfe

+0

'group by' gibt __single__ string für jeden Artikel zurück. –

+0

Danke du_mulder. Ich muss die Gruppe verwenden, sonst werde ich alle Doppel anzeigen. Irgendein Vorschlag? –

+0

Welche Doppelpunkte werden angezeigt? –

Antwort

3
geschätzt wird

Ich vermute, Sie wollen etwas wie thi s:

SELECT article_number, GROUP_CONCAT(DISTINCT size) 
FROM table 
GROUP BY article_number; 

Es sei denn, Sie wirklich, wirklich, wirklich wissen, was Sie tun, verwenden Sie nicht SELECT * mit GROUP BY. Es ist in den meisten anderen Datenbanken nicht erlaubt und ist normalerweise ein Zeichen für kaputten Code.

+0

Danke Gordon. Hat nicht funktioniert. Es wird immer noch 1x Größe angezeigt. Muss ich etwas anderes hinzufügen? –

+0

@SaraZ. . . Führen Sie dies in phpadmin aus und prüfen Sie, ob die Abfrage das zurückgibt, was Sie möchten. Es kann sein, wie Sie die Daten lesen. –

+0

Es funktioniert für mich. Vielen Dank. Es gibt ein anderes Problem.Jetzt bekomme ich doppelte Größen. Wenn der gleiche Artikel die gleichen Größen hat. –

1

Der Rückgabewert aus der SQL wird die erste Antwort, die die gruppierte Artikelnummer übereinstimmt, wenn es mehrere Einträge für die Artikelnummer ist, daher die L

kehrte ich BY article_number und vergessen Sie die GROUP BY-Klausel ORDER würde .

Dies würde alle Antworten auf den PHP-Parser zurückgeben

$sql = "SELECT * FROM table ORDER BY article_number" 
$result = $site_db->query($sql); 
$my_array = array(); 

$article_number = ''; 
$size = ''; 
while ($row = $site_db->fetch_array($result)) { 
    if($row['article_number']!=$article_number) { 
    $article_number = $row['article_number']; 
    $size = $row['size']; 
    } else { 
    $article_number = $row['article_number']; 
    $size .= ' - '.$row['size']; 
    } 
    $my_array[$row['article_number']] = $row['size']; 
} 
0
SELECT * 
    FROM my_table 
ORDER 
    BY articlenr 
    , FIELD(size,'XS','S','M','L','XL','XXL'); 

Der Rest dieses Problems mit einer einfachen PHP-Schleife gelöst werden kann.

Verwandte Themen