2016-02-11 2 views
1

У меня есть простая строка кода, которая извлекает базу данных сиквела и заполняет список категорий, причем эти строки категорий относятся к таблице продуктов, поэтому многие строки продуктов производят двойные записи категорий.PHP: mysql_fetch_array исключить дубликаты записей

$cat_result = $mysqli -> query("SELECT * FROM products"); 
while ($cat_row = mysqli_fetch_array($cat_result, MYSQL_NUM)) { 
    if($cat_row['4'] != NULL) { 
     print '<li><a href="/category/'. $cat_row['4'] .'">'. $cat_row['4'] .'</a></li>'; 
    } 
} 

Выходной ток, как это:

  • Категория1
  • Категория1
  • Категория2
  • Категория2

Так как я могу подавить повторяющиеся записи и получили что-то вроде это?

  • Категория1
  • Категория2

Спасибо за вашу помощь!

+2

DISTINCT и/или GROUP BY –

+0

Привет @ Fred-II-, увидимся снова! Поэтому я должен сделать «SELECT * FROM product GROUP BY category», где я должен использовать DISTINCT? – andreaem

+2

'$ cat_result = $ mysqli -> query (" SELECT DISTINCT (name) FROM products "); или $ cat_result = $ mysqli -> query ("SELECT * FROM products GROUP BY name"); ' –

ответ

6

В соответствии с просьбой:

Вы можете использовать либо отчетливую в SELECT, и/или в GROUP BY

Ie:

SELECT DISTINCT col1, col2 FROM TABLE GROUP BY col_x

согласно http://dev.mysql.com/doc/refman/5.7/en/distinct-optimization.html

, который будет избегайте дубликатов в запросе.

Кроме того, предложение WHERE также может быть полезно (позже).

т.е .:

SELECT DISTINCT col1, col2 FROM TABLE WHERE col_x = 'y' GROUP BY col_x 

Ссылка:

3

Как было предложено всем выше DISTINCT и GROUP BY как можно решить вашу проблему, так что вы можете сделать, как показано ниже: -

Пусть имя столбца category затем: -

$cat_result = $mysqli -> query("SELECT DISTINCT(category) FROM products"); 

OR 

$cat_result = $mysqli -> query("SELECT * FROM products GROUP BY category"); 

Примечание: - вы можете выбрать n количество разных столбцов в DISTINCT тоже, как предложено другими. Благодарю.

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