[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Выборка уникальных значений столбца
Strannik
Здравствуйте. Есть таблица в базе данных MySQL.
В ней 3 столбца: id(auto_incriment), name(varchat) и date(varchat).

в таблицу внесены 3 записи:
1, Alex, 12.12.2008;
2, Alex, 12.12.2008;
3, Alex, 14.12.2008;

Вопрос в том, как мне сделать запрос на выборку значений столбца date, чтобы эти значения не повторялись?
P.S.: т.е. чтобы в результате выборки выводились значения 12.12.2008 и 14.12.2008, а не 12.12.2008, 12.12.2008 и 14.12.2008.



Спустя 6 минут, 52 секунды (11.04.2009 - 12:44) jetistyum написал(а):
почитай про distinct

Спустя 45 минут, 24 секунды (11.04.2009 - 13:29) Strannik написал(а):
спс разобрался

Спустя 5 месяцев, 14 дней, 1 час, 47 минут, 55 секунд (25.09.2009 - 15:17) bar-boss написал(а):
Похожая тема. Есть таблица (id - автоинкремент, id_photo (int), id_catalog (int))
И записи:
1 1 1
2 2 2
3 3 3
4 4 4
5 5 1

Нужно выбрать две случайные записи и чтобы id_catalog не повторялись.
То есть такой выборки быть не должно:
1 1 1
5 5 1

SQL
SELECT DISTINCT id_photo, id_catalog FROM `table` ORDER BY RAND() LIMIT 2

Такой запрос почему-то всё равно выводит такую выборку.

Спустя 23 минуты, 27 секунд (25.09.2009 - 15:41) glock18 написал(а):
DISTINCT всегда применяется ко всему набору полей.

то есть в данном случае уникальной будет пара (id_photo; id_catalog). Если список уникальных полей и полей для выборки разные, в mysql можно использовать group by <уникальные поля> без ключевого слова distinct

Спустя 21 минута (25.09.2009 - 16:02) bar-boss написал(а):
Если использовать GROUP BY, то получится такой запрос

SQL
SELECT id_photo, id_catalog FROM `table` GROUP BY id_catalog ORDER BY RAND() LIMIT 2


Тогда строчка с id=5 не выберется никогда

Спустя 29 минут, 9 секунд (25.09.2009 - 16:31) glock18 написал(а):
Цитата
Тогда строчка с id=5 не выберется никогда

почему это?

Спустя 4 минуты (25.09.2009 - 16:35) bar-boss написал(а):
Потому что при группировке берется только первое значение.
То есть если сделать GROUP_CONCAT(id_photo) и id_catalog=1, то в выводе будет (1,5). Mysql видимо берет только 1.

На самом деле так и есть, я уже раз 100 нажимал F5, и в результате id_photo никогда не был равен 5.

Спустя 28 минут, 58 секунд (25.09.2009 - 17:04) glock18 написал(а):
bar-boss
Да, интересно. Действительно, так.

Тогда я вижу такой вариант:
1. хранить все id категорий в кэше.
2. когда нужно вытащить две случайных, из массива тащим два случайных элемента (вариантов много- shuffle, rand и т.п.)
3. получив два id выполняем такой запрос

SQL
select * from `table` where id_category=@cat1Id limit 1
union all
select * from `table` where id_category=@cat2Id limit 1


да, забыл. еще в каждый order by rand() скорее всего понадобится.

Спустя 3 часа, 32 минуты, 45 секунд (25.09.2009 - 20:37) FatCat написал(а):
А что мешает сделать в 2 запроса?
Я не люблю использовать RAND() в запросах, уж больно он медленный. Не исключено, что в 2 запроса на круг будет и экономичней, если случайный выбор сделать средствами пхп.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.