В ней 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
И записи:
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
то есть в данном случае уникальной будет пара (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.
То есть если сделать 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 выполняем такой запрос
Да, интересно. Действительно, так.
Тогда я вижу такой вариант:
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 запроса на круг будет и экономичней, если случайный выбор сделать средствами пхп.
Я не люблю использовать RAND() в запросах, уж больно он медленный. Не исключено, что в 2 запроса на круг будет и экономичней, если случайный выбор сделать средствами пхп.