Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
Страницы: (20) « Первая ... 12 13 [14] 15 16 ... Последняя » ( Перейти к первому непрочитанному сообщению )  
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Простой тест на PHP
maruo  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 324
Пользователь №: 37433
На форуме: 3 года, 6 месяцев, 21 день
Карма: 1




Рандомно выводить получилось :D
Но что бы это сделать пришлось позвать на помощь rand , ибо когда было в запросе ORDER BY RAND() в первом запросе выводились ответы из вопроса под идентификатором 1. а во во втором запросе получался выводился другой вопрос.

Как еще можно выводить рандомно вопрос? без использования переменной $rand?


$query = "SELECT q.q_id, q.q_quest, a.a_id, a.a_answer, a.a_correct
FROM answer a
RIGHT JOIN (SELECT q_id, q_quest
FROM question WHERE q_id=
$rand
) q USING(q_id) WHERE a.a_correct = 1 LIMIT 4
UNION
SELECT q.q_id, q.q_quest, a.a_id, a.a_answer, a.a_correct
FROM answer a
RIGHT JOIN (SELECT q_id, q_quest
FROM question WHERE q_id=
$rand
) q USING(q_id) LIMIT 4
"
;


Это сообщение отредактировал maruo - 24.12.2015 - 20:32
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
kostr  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Пользователь
**

Профиль
Группа: Пользователь
Сообщений: 67
Пользователь №: 41917
На форуме: 1 год, 1 месяц, 29 дней
Карма: 3




Неправильные ответы - там ведь должно быть
WHERE a.a_correct =0

почему вы это не задаете?
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
maruo  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 324
Пользователь №: 37433
На форуме: 3 года, 6 месяцев, 21 день
Карма: 1




Цитата (kostr @ 24.12.2015 - 20:34)
Неправильные ответы - там ведь должно быть
WHERE a.a_correct =0

почему вы это не задаете?

$query = "SELECT q.q_id, q.q_quest, a.a_id, a.a_answer, a.a_correct
FROM answer a
RIGHT JOIN (SELECT q_id, q_quest
FROM question WHERE q_id=
$rand) q USING(q_id) WHERE a.a_correct = 1
UNION
SELECT q.q_id, q.q_quest, a.a_id, a.a_answer, a.a_correct
FROM answer a
RIGHT JOIN (SELECT q_id, q_quest
FROM question WHERE q_id=
$rand) q USING(q_id) WHERE a.a_correct = 0 LIMIT 4
"
;


Да поставил неправильные ответы.
Но у меня теперь новые проблемы.
Теперь правильный ответ всегда находится слева в каждом вопросе.
И ORDER BY RAND я не могу использовать.
Если ставлю его во втором запросе, то тогда не выводится верный иногда.
А в первом запросе нельзя ставить ORDER BY RAND выдает ошибку
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
kostr  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Пользователь
**

Профиль
Группа: Пользователь
Сообщений: 67
Пользователь №: 41917
На форуме: 1 год, 1 месяц, 29 дней
Карма: 3




а если так попробовать?

$query = "
SELECT q.q_id, q.q_quest, a.a_id, a.a_answer, a.a_correct
FROM answer a
INNER JOIN question q USING(q_id)
WHERE a.a_correct = 1 ORDER BY RAND() LIMIT 1
UNION
SELECT q.q_id, q.q_quest, a.a_id, a.a_answer, a.a_correct
FROM answer a
INNER JOIN question q USING(q_id)
WHERE a.a_correct = 0 ORDER BY RAND() LIMIT 4
"
;


Это сообщение отредактировал kostr - 24.12.2015 - 21:13
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
maruo  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 324
Пользователь №: 37433
На форуме: 3 года, 6 месяцев, 21 день
Карма: 1




WHERE a.a_correct = 1 ORDER BY RAND() LIMIT 1

Перед юнион нельзя использовать ORDER BY сразу выдает ошибку
Incorrect usage of UNION and ORDER BY

Если убрать то все работает , но тогда правильный не всегда выводится Рандомно

+ к тому использование Inner join( пока не уверен что именно это оно так влияет)
Выводит ответы на другие вопросы(рандомно)

Это сообщение отредактировал maruo - 24.12.2015 - 21:19
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
kostr  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Пользователь
**

Профиль
Группа: Пользователь
Сообщений: 67
Пользователь №: 41917
На форуме: 1 год, 1 месяц, 29 дней
Карма: 3




А так тогда:
$query = "
SELECT q.q_id, q.q_quest, a.a_id, a.a_answer, a.a_correct
FROM answer a
INNER JOIN (SELECT q_id, q_quest FROM question ORDER BY RAND() LIMIT 1) q USING(q_id) WHERE a.a_correct=1
UNION
SELECT q.q_id, q.q_quest, a.a_id, a.a_answer, a.a_correct
FROM answer a
INNER JOIN (SELECT q_id, q_quest FROM question ORDER BY RAND() LIMIT 4) q USING(q_id) WHERE a.a_correct=0
"
;



Это сообщение отредактировал kostr - 24.12.2015 - 21:29
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
maruo  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 324
Пользователь №: 37433
На форуме: 3 года, 6 месяцев, 21 день
Карма: 1




INNER JOIN (SELECT q_id, q_quest FROM question ORDER BY RAND() LIMIT 4)

Здесь нельзя ставить лимит 4 выводится 4 вопроса же
И использовать ORDER BY RAND в выборке q_id , q_quest тоже нельзя.
До юнион может вывести ответы на вопрос первый.
А после юнион запрос может вывести ответы на 2й вопрос к примеру

Это сообщение отредактировал maruo - 24.12.2015 - 21:31
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
kostr  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Пользователь
**

Профиль
Группа: Пользователь
Сообщений: 67
Пользователь №: 41917
На форуме: 1 год, 1 месяц, 29 дней
Карма: 3




Вы не могли бы написать структуру таблиц? А то я проверить не могу и все сюда пишу вслепую.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
maruo  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 324
Пользователь №: 37433
На форуме: 3 года, 6 месяцев, 21 день
Карма: 1




Цитата (kostr @ 24.12.2015 - 21:30)
Вы не могли бы написать структуру таблиц? А то я проверить не могу и все сюда пишу вслепую.

sql
Свернутый текст
--
-- Структура таблицы `question`
--

CREATE TABLE IF NOT EXISTS `question` (
`q_id` int(11) NOT NULL AUTO_INCREMENT,
`q_quest` varchar(255) NOT NULL,
PRIMARY KEY (`q_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;

--
-- Дамп данных таблицы `question`
--

INSERT INTO `question` (`q_id`, `q_quest`) VALUES
(1, 'сколько будет 2 + 2'),
(2, 'сколько будет 2 + 3');

--
-- Структура таблицы `answer`
--

CREATE TABLE IF NOT EXISTS `answer` (
`a_id` int(12) NOT NULL AUTO_INCREMENT,
`q_id` int(11) NOT NULL,
`a_answer` varchar(255) NOT NULL,
`a_correct` int(1) NOT NULL,
PRIMARY KEY (`a_id`),
KEY `q_id` (`q_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=10 ;

--
-- Дамп данных таблицы `answer`
--

INSERT INTO `answer` (`a_id`, `q_id`, `a_answer`, `a_correct`) VALUES
(1, 1, '2', 0),
(2, 1, '4', 1),
(3, 1, '6', 0),
(4, 1, '8', 0),
(5, 2, '1', 0),
(6, 2, '3', 0),
(7, 2, '5', 1),
(8, 2, '7', 0),
(9, 2, '9', 0);

Примерно такая же у меня , только данные разные

user posted imageuser posted image

Это сообщение отредактировал maruo - 24.12.2015 - 21:35
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Valick  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 5492
Пользователь №: 35718
На форуме: 4 года, 15 дней
Карма: 167




maruo, не усложняйте себе жизнь. Здесь нет острой необходимости разбивать себе лоб, т.е. выполнить всё одним запросом.
1 запрос рандомный выбор вопроса.
2 запрос выбор правильного варианта UNION выбор 4-х неправильных вариантов рандомно для вопроса из первого запроса.


--------------------
wmr - R281553014107
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
maruo  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 324
Пользователь №: 37433
На форуме: 3 года, 6 месяцев, 21 день
Карма: 1




Цитата (Valick @ 24.12.2015 - 21:45)
maruo, не усложняйте себе жизнь. Здесь нет острой необходимости разбивать себе лоб, т.е. выполнить всё одним запросом.
1 запрос рандомный выбор вопроса.
2 запрос выбор правильного варианта UNION выбор 4-х неправильных вариантов рандомно для вопроса из первого запроса.

Но ведь можно? сделать так? Суть уже не в том усложнять или нет.
Теперь хочу сделать именно так. Вдруг пригодится.

К тому же есть непонимания, почему нельзя использовать ORDER by перед юнион.
я такого ни в каком источнике не нашел пояснений
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
kostr  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Пользователь
**

Профиль
Группа: Пользователь
Сообщений: 67
Пользователь №: 41917
На форуме: 1 год, 1 месяц, 29 дней
Карма: 3




В общем пока вижу только один путь: сначала рандомно выбрать номер вопроса $q_id, а потом по нему запрашивать ответы.

$query = "
(SELECT q.q_id, q.q_quest, a.a_id, a.a_answer, a.a_correct
FROM answer a
INNER JOIN (SELECT q_id, q_quest FROM question WHERE q_id=$q_id ORDER BY RAND()) q USING(q_id) WHERE a.a_correct=1 LIMIT 1)
UNION
(SELECT q.q_id, q.q_quest, a.a_id, a.a_answer, a.a_correct
FROM answer a
INNER JOIN (SELECT q_id, q_quest FROM question WHERE q_id=$q_id ORDER BY RAND()) q USING(q_id) WHERE a.a_correct=0 LIMIT 4)
"
;
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Valick  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 5492
Пользователь №: 35718
На форуме: 4 года, 15 дней
Карма: 167




Цитата (kostr @ 24.12.2015 - 20:54)
сначала рандомно выбрать номер вопроса $q_id, а потом по нему запрашивать ответы

у вас два разных* рандомных вопроса smile.gif


--------------------
wmr - R281553014107
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
maruo  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 324
Пользователь №: 37433
На форуме: 3 года, 6 месяцев, 21 день
Карма: 1




Цитата (kostr @ 24.12.2015 - 21:54)
В общем пока вижу только один путь: сначала рандомно выбрать номер вопроса $q_id, а потом по нему запрашивать ответы.

$query = "
(SELECT q.q_id, q.q_quest, a.a_id, a.a_answer, a.a_correct
FROM answer a
INNER JOIN (SELECT q_id, q_quest FROM question WHERE q_id=$q_id ORDER BY RAND()) q USING(q_id) WHERE a.a_correct=1 LIMIT 1)
UNION
(SELECT q.q_id, q.q_quest, a.a_id, a.a_answer, a.a_correct
FROM answer a
INNER JOIN (SELECT q_id, q_quest FROM question WHERE q_id=$q_id ORDER BY RAND()) q USING(q_id) WHERE a.a_correct=0 LIMIT 4)
"
;

Не получится, переменная не определена, даже если определяешь то другие последствия.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
maruo  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 324
Пользователь №: 37433
На форуме: 3 года, 6 месяцев, 21 день
Карма: 1




Цитата (Valick @ 24.12.2015 - 22:01)
Цитата (kostr @ 24.12.2015 - 20:54)
сначала рандомно выбрать номер вопроса $q_id, а потом по нему запрашивать ответы

у вас два разных* рандомных вопроса smile.gif

Это исправить просто, убрать во втором запросе Rand
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темыСтраницы: (20) « Первая ... 12 13 [14] 15 16 ... Последняя » Ответ в темуСоздание новой темыСоздание опроса