2016-08-13 3 views
1

Мне было интересно, есть ли у mysql способ взглянуть на столбец и получать результаты только когда он находит уникальный столбец один раз. НапримерСоздать список из раздела Категории в mysql

если таблица выглядит следующим образом:

id name category 
1 test Health 
2 carl Health 
3 bob Oscar 
4 joe Technology 

Как вы можете видеть их в два ряда, которые могут иметь ту же категорию. Является ли их способ получить результат, когда массив будет возвращать категорию только один раз?

То, что я пытаюсь сделать, это получить все категории в базе данных, чтобы я мог пропустить их позже в коде и использовать их. Например, если бы я хотел создать меню, я бы хотел, чтобы меню отображало все категории в меню.

Я знаю, что я могу запустить

SELECT categories FROM dbname 

но это возвращает повторяющиеся строки, где мне нужно только cateogry вернуть один раз. Есть ли способ сделать это на стороне mysql?

Я предполагаю, что я могу просто использовать РНР array_unique();

, но я чувствую, что это добавляет больше накладных расходов, это не то, что MYSQL может сделать на внутреннем интерфейсе?

+0

Вы можете использовать GROUP BY col –

+0

'select select category from table'? – RamRaider

+0

нет Я хочу все категории, но нужен только возвращаемый массив для повторного отображения повторяющихся категорий. Есть ли разница между группой и отличным от производительности в mysql? @ Fred-ii- – DEVPROCB

ответ

2

группа работала отлично @ Fred-ii- пожалуйста, отправьте это как ответ, чтобы я мог получить одобренное для вас.- DEVPROCB

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

Вы можете использовать GROUP BY col_of_choice для того, чтобы избежать дубликатов показан в запрашиваемых результатов.

Ссылка:

0

С помощью нормализации базы данных, вы можете создать еще одну таблицу с уникальным идентификатором и названием категории и этой ссылкой тех два вместе, как

выберите * из mytable1 на mytable1.cat = mytable2.id группы by mytable1.cat

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

0

Вы можете использовать select distinct:

SELECT DISTINCT categories 
FROM dbname ; 

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

  • Обеспечивает согласованность названий категорий (например, «Технология» и «Технология»).
  • Дает хороший список категорий, которые доступны.
  • Обеспечивает, чтобы категория зависала, даже если имена не указаны в настоящее время.
  • Позволяет получать дополнительную информацию о категориях, например, при первом появлении или более длинном описании.

Рекомендуется. Однако, если вы все еще хотите оставить категорию на своем месте, я бы порекомендовал индекс на dbname(categories). В запросе должен использоваться индекс.

+0

Я понимаю, что это создаст гораздо более простой случай. что база данных уже содержит категории, было бы не так легко преобразовать более 20000 записей, которые уже есть в списке. Если вы не можете предоставить код, который может перевести существующий столбец для ссылки на отдельную таблицу и заменить его номерами идентификаторов, но я бы предположил, что для этого потребуется другой вопрос, заданный в stackoverflow, поскольку он не связан с текущими вопросами. – DEVPROCB

+0

@DEVPROCB. , , Это было бы кандидатом на другой вопрос. –

0

ВЫБРАТЬ идентификатор, название от DbName GROUP BY CategoryName

Надеется, что это поможет.

Вы даже можете использовать определенную категорию.

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