Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > Цикличный вывод из Mysql


Автор: Gtaman 31.5.2006, 17:58
Тема такая:

Нужно вывести данные из таблицы по условию. Вот, как я делаю:

Код

$result = mysql_query("SELECT val1,val2 FROM tab1 WHERE val3 = 'value3'");
while(list($val1,$val2) = mysql_fetch_array($result)) // Вывод из первой таблицы. Без проблем.
{
echo "$val1 |"; // Собстно вывод.

$result2 = mysql_query("SELECT val4 FROM tab1 WHERE val3 = ''");
list($val4) = mysql_fetch_array($result2); // Это определение содержимого ячейки val4 первой таблицы.
$result3 = mysql_query("SELECT val2,val3 FROM tab2 WHERE val1 <> '$val4");
while(list($val_2_2,$val_3_2) = mysql_fetch_array($result3)) // Это вывод содержимого второй таблицы, с условием, что
// поле val1 не равно полю $val4.
{
echo "<a href=\"1.php?v=$val_2_2\">$val_3_2</a>"; // Вывод......
}
echo " $val2"; // Продолжается вывод из первой таблицы.
}


Так вот, что за трабл то...... Если в tab1 записей больше 1, то правильно выводится только если $val4 выбирается из самой первой записи, т.е. цикл почему-то тут не действует именно на эти запросы........  

Автор: sugee 1.6.2006, 00:58
Гы,  так что по-твоему делает list?
И как ты собираешься упаковать массив в одну переменную?

В данном случае нужно юзать mysql_result();

Добавлено @ 01:01 
И вообще,  где ты видел чтобы так  получали результат запроса  smile   

Автор: Gtaman 1.6.2006, 02:15
1. Лист я юзаю, чтобы обьявить переменную.
2. Зачем тут массив?

3. Поподробней плиз, как это поможет, а то уже 3 дня мучаюсь, проект стоит smile

4. А что конкретно не так? Мои скрипты, написанные подобным образом работают нормально. 

Автор: sugee 1.6.2006, 09:14
Цитата(Gtaman @  1.6.2006,  02:15 Найти цитируемый пост)
Зачем тут массив?

mysql_fetch_array возвращает массив

Цитата(Gtaman @  1.6.2006,  02:15 Найти цитируемый пост)
3. Поподробней плиз


Код

mysql_result($val4, $count, $result2['val4']);

где $count - счётчик цикла while


 

Автор: Gtaman 1.6.2006, 13:30
Цитата(sugee @  1.6.2006,  09:14 Найти цитируемый пост)
код PHP
1:

mysql_result($val4, $count, $result2['val4']);





где $count - счётчик цикла while


Поподробней можно? smile  

Автор: Mal Hack 1.6.2006, 16:32
Цитата(Gtaman @  1.6.2006,  13:30 Найти цитируемый пост)
Поподробней можно? smile   

http://php.net/mysql_result


Цитата(Gtaman @  31.5.2006,  17:58 Найти цитируемый пост)
WHERE val3 = ''");

Это у тебя что, счетчик так проверяется? 

Автор: Gtaman 1.6.2006, 17:56
Цитата(Mal Hack @  1.6.2006,  16:32 Найти цитируемый пост)
Цитата(Gtaman @  1.6.2006,  13:30 )
Поподробней можно? smile   


http://php.net/mysql_result


Все равно непонял, как она в моем случае поможет....


Цитата(Mal Hack @  1.6.2006,  16:32 Найти цитируемый пост)
Цитата(Gtaman @  31.5.2006,  17:58 )
WHERE val3 = ''");


Это у тебя что, счетчик так проверяется?  


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

Автор: Mal Hack 1.6.2006, 19:28
Gtaman, читаем мануал. О том, как сравниваются числа.


Цитата(Gtaman @  1.6.2006,  17:56 Найти цитируемый пост)
Все равно непонял, как она в моем случае поможет....

Пофигу что ты тут использовать будешь. Алгоритм продумывать и работу скрипта надо 

Автор: Gtaman 1.6.2006, 20:58
Mal Hack, так я и обратился поэтому, что непашет! Может я что-то не так сделал....... 

Автор: Mal Hack 2.6.2006, 11:15
Gtaman, так, обрисовывай задачу, что ты пытаешься сделать.
В принципе код логически верен, хотя и в корне не оптимален. 

Автор: Gtaman 2.6.2006, 12:16
Так....... Я делаю щас инвентарь для онлайн игры и предметы помещаются в слоты..... слоты все относятся к типам слотов(например руки) и под этим типом идут Правая рука и Левая рука. так вот нужно сделать так, чтобы, когда предмет поместил в правую руку - в цикле не выводилось предложение поместить в правую, а было только в левую и наоборот. 

Автор: ASteel 2.6.2006, 16:41
Блин,  smile что-то я не понял предыдущего оратора.
Что есть в вышеназванных терминах val1, val2, val3, val4, tab1, tab2: 
  • Предмет
  • Слот Правая Рука
  • Слот Левая Рука
Определи, пожалуйста. 

Автор: Mal Hack 2.6.2006, 23:37
Gtaman, я тогда вообще непонимаю, зачем тут цикл?
Грузишь все предметы, а дальше if'ами. 

Автор: Gtaman 3.6.2006, 02:37
Дык слоты выводить! smile 

Предметы грузятся в первом цикле. 

Автор: Mal Hack 3.6.2006, 08:13
Покажи страницу, как это должно выглядеть. 

Автор: Gtaman 3.6.2006, 12:27
Так как та страница, где можно посмотреть пример, требует авторизации в той игре(GanjaWars), то выложу скрины.

Вот, тут действующие лица 2 мобилы SIEMENS ME45, предлагается поместить предмет в слот пояс и в левый карман:

http://img68.imageshack.us/img68/5787/clp7741lc.jpg

После того, как я поместил один из мобильников в левый карман, то у другого мобильника исчезло предложение его туда поместить, а осталось только в пояс:

http://img68.imageshack.us/img68/1008/clp7755pr.jpg

Впринципе, скрипт, который я привел в первом своем посте работает, только работает как-будто нет цикла! Тоесть работает только с предметом, у которого id меньше всего! 

Автор: Mal Hack 3.6.2006, 13:59
Тебе нужен всего одним циклом работать. В запросах сразу формируешь поле с указанием, установлен ли опредемт или нет. 

Автор: Gtaman 3.6.2006, 14:58
Можно пример, а то я несовсем понимаю....... smile  smile  smile  

Автор: Mal Hack 3.6.2006, 23:53
Поставь себе задачу так.
Вывести все предметы, справа вывести слот.
Все это сделать одним запросом.
Потом тоже по слотам. 

Автор: ASteel 4.6.2006, 12:51
2Gtaman 
Ты можешь хотя бы показать структуру БД (эти 2 таблицы, что ты используешь) чтобы можно было дать тебе пример.  

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)