пропускается вывод строки первого уровня

usascha

Новичок
пропускается вывод строки первого уровня

Всем здрасте.
Тему уже много раз обсуждали, но я из всего прочитанного пока не понял как решить мою проблему. Может решение рядом? Подскажите.

Код ниже выводит текст вопроса, 3 варианта ответа на него и ... пропуская текст второго вопроса - 3 варианта ответа на этот второй вопрос. Как это исправить?
PHP:
$sql="SELECT q.*, a.*
		FROM answers a
		LEFT JOIN questions q ON a.a_question_num = q.q_id 
		ORDER BY q.q_id ASC, a_order ASC";
$query=mysql_query($sql) or error();

while($row=mysql_fetch_array($query)) {
	$question = $row['q_question'];
	if ($a==0) print "<h3>".$question."</h3>";
	for ($a=1; $a<=count($row['a_order']); $a++) {
		$letter[$a] = $row['a_order'];
		$answer[$a] = $row['a_answer'];
		echo "<br />".$letter[$a].") ".$answer[$a];
	}
	$a==0;
}

ЗЫ. Как я понимаю, этот вопрос относиться к теме древовидного вывода данных, но честное слово, читал по теме и форум и внешние ссылки. Никак картинка не складывается.

:(
 

Фанат

oncle terrible
Команда форума
не пробовал просто вывести данные из базы?
в консоли, к примеру?
или даже здесь, в скрипте
 

usascha

Новичок
Код:
q_id q_question q_level_num q_answer_num q_group_num a_id a_question_num a_answer a_order
1 	Вопрос1 	1 	2 	1 	1 	1 	Ответ 1-1 	а
1 	Вопрос1 	1 	2 	1 	2 	1 	Ответ 1-2	б
1 	Вопрос1 	1 	2 	1 	3 	1 	Ответ 1-3	в
2 	Вопрос2 	1 	2 	1 	4 	2 	Ответ 2-1 	а
2 	Вопрос2 	1 	2 	1 	5 	2 	Ответ 2-2 	б
2 	Вопрос2 	1 	2 	1 	6 	2 	Ответ 2-3 	в
 

Фанат

oncle terrible
Команда форума
ну вот - значит есть вопрос?
надо его только вывести.

к древовидному выводу данных твой вопрос не имеет ни малейшего отношения.
надо просто продумать логику вывода, и реализовать её в коде.
 

usascha

Новичок
Изменил так. Всё равно не то что надо.
PHP:
$q=1;
while($row=mysql_fetch_array($query)) {
	$question[$q] = $row['q_question'];
	print "<h3>".$question[$q]."</h3>";
	for ($a=1; $a<=count($row['a_order']); $a++) {
		$letter[$a] = $row['a_order'];
		$answer[$a] = $row['a_answer'];
		echo "<br />".$letter[$a].") ".$answer[$a];
	$q++;
	}
}
 

Anarki

Новичок
Логика какая-то странная
Наверное mysql_fetch_array возвращает строку из результата, не кажется ли?
PHP:
count($row['a_order'])
$row['a_order'] это не массив, чтобы его считать в данном случае, это просто будет 'а' или 'б' или 'в'
count будет возвращать единицу
 

Anarki

Новичок
Ну так, хотелось бы видеть новый код, так как пока не телепат :)
 

usascha

Новичок
Публикую очередную версию.
Поискал в онлайн мануале функции по работе с массивами и добавил строку 4.
Вывод стал больше похож на то что надо, но выдаётся сообщение: Notice: Undefined offset: 2 in ... on line 27
строка 27 здесь - строка 5.
PHP:
$q=1;
while($row=mysql_fetch_array($query)) {
    $question[$q] = $row['q_question'];
    $question=array_unique($question);
    print "<h3>".$question[$q]."</h3>";
    for ($a=1; $a<=count($row['a_answer'][$q]); $a++) {
        $letter[$a] = $row['a_order'];
        $answer[$a] = $row['a_answer'];
        echo "<br />".$letter[$a].") ".$answer[$a];
    $q++;
    }
}
Был бы признателен за помощь в решении по коду выше.

После некоторых размышлений сделал следующее:
PHP:
$q=1;
while($row=mysql_fetch_array($query)) {
	$question[$q] = $row['q_question'];
//	$question=array_unique($question);
	if ($q==1) {
		print "<h3>".$question[$q]."</h3>";
	} else {
		if($question[$q] == $question[$q-1]) {}
		else 
			print "<h3>".$question[$q]."</h3>";
	}
	for ($a=1; $a<=count($row['a_answer'][$q]); $a++) {
		$letter[$a] = $row['a_order'];
		$answer[$a] = $row['a_answer'];
		echo "<br />".$letter[$a].") ".$answer[$a];
	}
	$q++;
}
Результат на экране меня полностью устраивает, но хотелось бы узнать мнение умных людей насколько такое решение правильно красиво и можно ли сделать лучше.
Заранее спасибо.
 

Фанат

oncle terrible
Команда форума
вообще-то, ужасно, конечно =)
обычно такие вещи делаются с помощью переменной, которая запоминает предыдущее состояние.
и, соответственноЮ, вызывает блок print "<h3>".$question[$q]."</h3>"; только тогда, когда предыдущее значение 'q_question' не равно текущему
 
Сверху