SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 23.05.2011 01:25:43

sNICkerssss
Участник
Зарегистрирован: 13.11.2010
Сообщений: 5

Не выполняется произвольная выборка данных

Добрый день. Друзья, подскажите. Вот запрос:

select title from votes_name where id IN (select id from votes_name order by rand()) LIMIT 1;

Почему не выбирается рандомное значение title, а все время первое? Заранее спасибо.

Неактивен

 

#2 23.05.2011 09:31:47

evgeny
Гуру
Зарегистрирован: 04.05.2009
Сообщений: 335

Re: Не выполняется произвольная выборка данных

Потому что не правильно составлен запрос.
Если вам нужна одна рандомальная запись из votes_name  , то это делается так :
select title from votes_name order by rand() LIMIT 1;

Неактивен

 

#3 28.05.2011 23:46:21

sNICkerssss
Участник
Зарегистрирован: 13.11.2010
Сообщений: 5

Re: Не выполняется произвольная выборка данных

Спасибо за ответ. Но у меня просто основной запрос не такой. Есть таблица с вопросами для голосования votes_name(id, title) и таблица с вариантами ответов votes_item(id, id_title, item). Внешний ключ votes_name.id = votes_item.id_title. Задача - выбрать рандомно одно голосование.
Строю такой запрос:
    SELECT votes_name.title, votes_item.item
        FROM votes_name, votes_item
        WHERE votes_name.id = votes_item.id_title
        AND votes_name.id = (select id from votes_name order by rand() LIMIT 1)

Проблема в том, что не выбирается id в подзапросе. Подскажите, как быть?

Неактивен

 

#4 29.05.2011 01:09:46

evgeny
Гуру
Зарегистрирован: 04.05.2009
Сообщений: 335

Re: Не выполняется произвольная выборка данных

SELECT votes_name.title, votes_item.item
        FROM votes_name, votes_item
        WHERE votes_name.id = votes_item.id_title
        order by rand() LIMIT 1;

Неактивен

 

#5 29.05.2011 12:55:02

sNICkerssss
Участник
Зарегистрирован: 13.11.2010
Сообщений: 5

Re: Не выполняется произвольная выборка данных

2evgeny
Спасибо за ответ, но за счет того, что в запросе ставится
order by rand() LIMIT 1
происходит выборка 1-го вопроса и только 1-го варианта ответа. А нужно выбрать все варианты ответа из таблицы votes_item

Отредактированно sNICkerssss (30.05.2011 01:44:37)

Неактивен

 

#6 30.05.2011 13:12:59

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Не выполняется произвольная выборка данных

Код:

WHERE votes_name.id = votes_item.id_title
AND votes_name.id = (select id from votes_name order by rand() LIMIT 1)

Сравните эти две строки внимательно глазами. В нижней Вы фиксируете
votes_name.id. В верхней Вы фиксируете votes_item.id_title тем значением,
которое зафиксировали в нижней. Поэтому выбирается одна строка.

Скорее всего, Вы неправильно написали условие связи таблиц.

Неактивен

 

#7 30.05.2011 15:11:12

evgeny
Гуру
Зарегистрирован: 04.05.2009
Сообщений: 335

Re: Не выполняется произвольная выборка данных

sNICkerssss написал:

2evgeny
Спасибо за ответ, но за счет того, что в запросе ставится
order by rand() LIMIT 1
происходит выборка 1-го вопроса и только 1-го варианта ответа. А нужно выбрать все варианты ответа из таблицы votes_item

Ага ... Тогда вам надо так

   SELECT votes_name.title, votes_item.item
        FROM (select * from votes_name order by rand() LIMIT 1) votes_name, votes_item
        WHERE votes_name.id = votes_item.id_title

Неактивен

 

#8 02.06.2011 03:37:34

sNICkerssss
Участник
Зарегистрирован: 13.11.2010
Сообщений: 5

Re: Не выполняется произвольная выборка данных

Большое спасибо за ответ. Все работает!
Но у меня вопрос. А как должен выглядеть запрос, если условия практически те же, но рандомный id-шник "вытягивается" с другой таблицы. Вот картинка связки таблиц.
http://www.pictureshack.ru/view_4008Bezymyannyi.jpg
То есть сначала вытягиваем рандомом поле з таблицы "votes_id", затем по найденному "vote_id" выбираем из "votes_name" вопрос и по его id из таблицы "votes_item" все ответы.

Как сделать такой запрос. Помогите плиз. Голова пухнет, не могу правильно построить запрос.

Неактивен

 

#9 02.06.2011 11:14:43

evgeny
Гуру
Зарегистрирован: 04.05.2009
Сообщений: 335

Re: Не выполняется произвольная выборка данных

Соедините таблицы JOIN-нами. Не ищите готовых решений, учитесь, проводите свои эксперименты. :-)

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson