обработка запроса делается по-разному

usascha

Новичок
обработка запроса делается по-разному

всем привет.
есть код и запрос:

PHP:
foreach ($_POST['group_num'] as $k => $v) 
	$_GET['group_num'][$k] = mysql_real_escape_string ($v);
$in = "'".(implode("','", $_GET['group_num']))."'";

$sql="SELECT q.*, a.*
	FROM answers a, questions q
	WHERE q.qid = a.a_question_num 
		AND q.q_level_num <= ".$_POST['level_num']."
	HAVING q.q_group_num IN ($in)
	ORDER BY q.q_id ASC, a_order ASC
	LIMIT 0, ".$_POST['razmer'];
echo nl2br($sql) выдаёт следующее:
Код:
SELECT q.*, a.*
FROM answers a, questions q
WHERE q.qid = a.a_question_num
AND q.q_level_num <= 2
HAVING q.q_group_num IN ('2','7')
ORDER BY q.q_id ASC, a_order ASC
LIMIT 0, 6
т.е. прихожу к выводу, что запрос формируется с ним всё в порядке.

ТЕПЕРЬ ПРОБЛЕМА: этот запрос выдаёт мне в скрипте всего два результата, то он же, но в phpmyadmin выдаёт, как и задумано, - 6.
Если в скрипте убираю команду LIMIT, то скрипт отрабатывает нормально.

В чём прикол и на что смотреть?

Поразмыслив уже не первый день, сегодня додумался до возможного решения.
Если делать запрос только по значению q.q_group_num, то результатов будет больше чем 6 и в случае "2", и в случае "7". А я ещё накладываю ограничение на параметр q.q_level_num, что тоже сокращает количество результатов...

НО ТОГДА КАК БЫТЬ с такими условиями в запросе?
 

zerkms

TDD infected
Команда форума
кэш mysql иногда может так шалить
попробуй добавить SQL_NO_CACHE
 

alpine

Новичок
usascha
А можешь объяснить сакральный смысл вот этой конструкции:
HAVING q.q_group_num IN ('2','7')
?
 

usascha

Новичок
это имеются ввиду номера тематик вопросов. Всего их 7, а выбрать в данном случае надо те, у которых номера 2 и 7.
 

alpine

Новичок
usascha
Ну так почему в хевинге а не в вере?

-~{}~ 22.05.07 16:39:

Почитаешь на досуге - http://www.phpclub.ru/mysql/doc/select.html
Не используйте это выражение для определения того, что должно быть определено в WHERE. Например, нельзя задать следующий оператор:

mysql> SELECT col_name FROM tbl_name HAVING col_name > 0;

Вместо этого следует задавать:

mysql> SELECT col_name FROM tbl_name WHERE col_name > 0;
 

usascha

Новичок
спасибо за напоминание.
это я уже поправил. разместил очередной вариант, так что это не главное, поскольку изменение на where не меняет сути проблемы:
группировка не получается.
вывод из базы следующий:
вопрос1 группа1 ответ1-1
вопрос1 группа1 ответ1-2
вопрос1 группа1 ответ1-3
вопрос2 группа2 ответ2-1
вопрос2 группа2 ответ2-2
вопрос2 группа2 ответ2-2
вопрос3 группа2 ответ3-1
вопрос3 группа2 ответ3-1
вопрос3 группа2 ответ3-1
 

Trianon

Новичок
LIMIT ограничивает лишь resultset но никак не группы.
Чего Вы пытаетесь достичь?
 
Сверху