Пуля — дура. Пых — молодец.

Добро пожаловать на Пыху!

Логин:
Пароль:
 

Нет прописки? Зарегистрируйся!

Новости

Пыха переехала на новый сервер, ура!

Краснодарское время: 25 Май, 2012, 08:01:30

Страниц: [1]
Печать
Автор Тема: Вытащить рендомом из базы  (Прочитано 1627 раз)
0 Пользователей и 1 Гость смотрят эту тему.
NRG    ↓ 
21 Апрель, 2008, 06:56:48
НЕ ХУЕТА! ХУЕТА!

Headshot!MultiKill!
Группа: нинзя

Карма: 777
Сообщений: 4700
Сила слова: 16.81

Введение :
Делаю тест на пхп. Есть две таблицы tbl_questions и tbl_answers.
tbl_questions имеет структуру :
| ID | question |
 
tbl_answers имеет структуру :
| ID | question_id | answer | is_correct |
 
т.е. у каждого вопроса может быть сколько угодно вариантов ответов, но истинный только один.
 
Задача :
Вытащить рендомные ответы. т.е. вытащить один ответ тот который является правильный и вытащить рендомом два неправильных.
 
Мое решение :
Text
SELECT * FROM `tbl_answers` WHERE `question_id` = '3' AND `is_correct` = '1' UNION SELECT * FROM `tbl_answers` WHERE `question_id` = '3' ORDER BY RAND() LIMIT 3

но к сожалению, рендомом вытягивается все 3 ответа, т.е. не всегда вытягивается истинный ответ ( тот у которого is_correct == 1 ).
 
Подскажите что я делаю не так...
 
как вариант я думал разбить все ето дело на два запроса...
в 1-ом вытаскивать только правильный ответ, а во 2-ом вытягивать рендомом 2 неправильных....
но я просто хочу разобратся почему не проходит первый запрос...
 
заранее благодарен
Записан

Буратино дрочил, дрочил и сгорел
Java и JavaScript это абсолютно разные вещи !!!
Господа, вы хуйня.
девушки краснели, отворачивались но порнуху продолжали смотреть
AlexB    ↓ 
21 Апрель, 2008, 07:27:04 , спустя 30 минут 16 секунд
НЕ ХУЕТА! ХУЕТА!

Группа: в ухо

Карма: 89
Сообщений: 3428
Сила слова: 2.6

SELECT * FROM tbl_answers WHERE question_id=3 ORDER BY is_correct DESC, RAND() LIMIT 3
 
Потом сделать рандомный порядок с помощью php shuffle
Записан

ghost    ↓ 
21 Апрель, 2008, 07:30:41 , спустя 3 минуты 37 секунд
НЕ ХУЕТА! ХУЕТА!

без вариантов
Группа: в ухо

Карма: 29
Сообщений: 876
Сила слова: 3.31

NRG, странно, должен работать с юнионом.., хотя с сортировкой лучше :)
« Последнее редактирование: 21 Апрель, 2008, 07:33:00 от ghost » Записан

Если ты уже два часа споришь с идиотом - скорее всего он делает тоже самое...
NRG    ↓ 
22 Апрель, 2008, 05:01:34 , спустя 21 час 30 минут 53 секунды
НЕ ХУЕТА! ХУЕТА!

Headshot!MultiKill!
Группа: нинзя

Карма: 777
Сообщений: 4700
Сила слова: 16.81

AlexB, спасибо за совет, но я все же искал возможность как это сделать только запросом....
 
все же я решил эту задачу, решение меня поразило....     =)
 
Text
(SELECT * FROM `tbl_answers` WHERE `question_id` = '3' AND `is_correct` = '1' LIMIT 1)
UNION
(SELECT * FROM `tbl_answers` WHERE `question_id` = '3' AND `is_correct` != '1' ORDER BY RAND() LIMIT 2) ORDER BY RAND()

всем спасибо за ответы.
Записан

Буратино дрочил, дрочил и сгорел
Java и JavaScript это абсолютно разные вещи !!!
Господа, вы хуйня.
девушки краснели, отворачивались но порнуху продолжали смотреть
ghost    ↓ 
22 Апрель, 2008, 06:13:56 , спустя 1 час 12 минут 22 секунды
НЕ ХУЕТА! ХУЕТА!

без вариантов
Группа: в ухо

Карма: 29
Сообщений: 876
Сила слова: 3.31

имхо, в даном случае решение одним запросом не оптимально
Записан

Если ты уже два часа споришь с идиотом - скорее всего он делает тоже самое...
NRG    ↓ 
22 Апрель, 2008, 07:24:36 , спустя 1 час 10 минут 40 секунд
НЕ ХУЕТА! ХУЕТА!

Headshot!MultiKill!
Группа: нинзя

Карма: 777
Сообщений: 4700
Сила слова: 16.81

имхо, в даном случае решение одним запросом не оптимально

аргументируйте.
Записан

Буратино дрочил, дрочил и сгорел
Java и JavaScript это абсолютно разные вещи !!!
Господа, вы хуйня.
девушки краснели, отворачивались но порнуху продолжали смотреть
AlexB    ↓ 
22 Апрель, 2008, 07:35:13 , спустя 10 минут 37 секунд
НЕ ХУЕТА! ХУЕТА!

Группа: в ухо

Карма: 89
Сообщений: 3428
Сила слова: 2.6


аргументируйте.
В 99% случаев узкое место веб-приложения - БД. Хотя в данном вопросе все это не столь существенно ... можно и так и так.
Записан

NRG    ↓ 
22 Апрель, 2008, 07:53:26 , спустя 18 минут 13 секунд
НЕ ХУЕТА! ХУЕТА!

Headshot!MultiKill!
Группа: нинзя

Карма: 777
Сообщений: 4700
Сила слова: 16.81

ну лично я всегда считал, что от БД нужно брать все по максимуму....
 
к примеру, считать кол-во строк в таблице ф-ей COUNT а не средствами пхп....
 
разве я не прав ?
Записан

Буратино дрочил, дрочил и сгорел
Java и JavaScript это абсолютно разные вещи !!!
Господа, вы хуйня.
девушки краснели, отворачивались но порнуху продолжали смотреть
AlexB    ↓ 
22 Апрель, 2008, 08:14:11 , спустя 20 минут 45 секунд
НЕ ХУЕТА! ХУЕТА!

Группа: в ухо

Карма: 89
Сообщений: 3428
Сила слова: 2.6


к примеру, считать кол-во строк в таблице ф-ей COUNT а не средствами пхп....
не корректный пример, запрос к базе будет в любом случае, как не считай.
Записан

NRG    ↓ 
22 Апрель, 2008, 08:17:25 , спустя 3 минуты 14 секунд
НЕ ХУЕТА! ХУЕТА!

Headshot!MultiKill!
Группа: нинзя

Карма: 777
Сообщений: 4700
Сила слова: 16.81

не корректный пример, запрос к базе будет в любом случае, как не считай.
а в случае вытягивания ответов из базы запроса не будет чтоли ?
Записан

Буратино дрочил, дрочил и сгорел
Java и JavaScript это абсолютно разные вещи !!!
Господа, вы хуйня.
девушки краснели, отворачивались но порнуху продолжали смотреть
AlexB    ↓ 
22 Апрель, 2008, 08:20:11 , спустя 2 минуты 46 секунд
НЕ ХУЕТА! ХУЕТА!

Группа: в ухо

Карма: 89
Сообщений: 3428
Сила слова: 2.6

один запрос, вместо фактически двух объединенных UNION
 
Хотя я уже сказал, в данном случае это все не существенно. Сделал с юнионом - ну и отлично, нет повода морочиться.
Записан

Страниц: [1]
Печать
 

Перейти в: