2016-11-14 5 views
0

я не мог понять, как решить эту проблему:Массив хранит только одно значение вместо нескольких

База данных:

+-------+-------------+------+ 
| 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']; 
} 

Как показывают результаты, которые я получил это:

AN111: L
AN222: M

Однако я хочу что-то вроде этого:

AN111: L - XL
AN222: M

Любая помощь будет оценена

+0

'group by' возвращает __single__ строка для каждой статьи. –

+0

Спасибо u_mulder. Я должен использовать группу, иначе я буду отображать все двойные. Любое предложение? –

+0

Какие удвоения вы будете отображать? –

ответ

3

Я предполагаю, что вы хотите что-то вроде thi s:

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

Если вы действительно, действительно, действительно не знаю, что вы делаете, не используйте SELECT * с GROUP BY. Он не разрешен в большинстве других баз данных и обычно является признаком неисправного кода.

+0

Спасибо Гордон. Не работает. Он по-прежнему отображает размер 1x. Должен ли я добавить что-то еще? –

+0

@SaraZ. , , Запустите это в phpadmin и посмотрите, возвращает ли запрос то, что вы хотите. Возможно, вы читаете данные. –

+0

Это работает для меня. Большое спасибо. Проблема с ohter.Теперь я получаю двойной размер. Если одна и та же статья имеет одинаковые размеры. –

1

Возвращаемое значение из SQL будет первый ответ, который соответствует сгруппированному номеру статьи, если есть несколько записей для артикулов, следовательно, возвращенное L

Я ORDER BY article_number и забыть предложения GROUP BY ,

Это будет возвращать все ответы на PHP парсер

$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'); 

Остальная часть этой проблемы могут быть решены с помощью простого цикла PHP.

Смежные вопросы