Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Помогите разобраться с while и foreach


Автор: smashTeAm 3.1.2008, 21:31
для примера:
Код

$query = "SELECT * FROM my_table";
$result = mysql_query ($query)
  or die ("Query failed");

while ($line = mysql_fetch_array($result))
{
   foreach( explode( ",", $line['ids'] ) as $id )
    {
    $id = intval( $id );
    $query = "SELECT * FROM my_table2 WHERE ID=".$id;
    $res = mysql_query ($query2)
    $print .= $res['data'].", ";
    }
echo $line['ids']."<i>".$res['data'].</i><br />;                                
}




в итоге получаю в $res['data'] значения из строк где предыдущее значение $line['ids'] не массив. Я пока ещё в принципе нуб, как правильно вывести?

Автор: GZep 3.1.2008, 22:09
smashTeAm, 
не понятен вопрос. Что надо получить? как вывести? что должен делать код?

Автор: smashTeAm 3.1.2008, 22:22
ну к примеру есть таблица содержащая 

id              name          ids

и вторая 

id              name

вывожу 

из первой name и из второй name ids которых указаны в первой таблице.

к примеру если в первой таблице записи вида:

id              name          ids
1          пример1          1
2          пример2           2,3

а во второй 

id              name
1               вася
2               петя
3               маша

то он мне должен вывести

пример1 вася
пример2 петя, маша

у меня же получается 

пример1 вася
пример2 вася, петя, маша

Автор: flashaa 4.1.2008, 00:03
По-моему ошибка в том,что нет вызова mysql_fetch_array для второго (внутреннего) запроса.
Цитата(smashTeAm @  3.1.2008,  21:31 Найти цитируемый пост)
Код

$res = mysql_query ($query2);
// здесь должно быть что-то вроде $ar = mysql_fetch_array($res);
$print .= $res['data'].", "; // а тут должны юзать не $res, а $ar


Автор: smashTeAm 4.1.2008, 00:32
тоже самое. там ошибка связана не с запросами, он мне суёт ответы мускула из первой строки во вторую почемуто. где то я чтото не правильно указываю... а приведённый код он просто для примера, для описания схемы так сказать, может ктото посоветует правильную схему такого вывода?

Автор: flashaa 4.1.2008, 12:24
Касательно подхода, убрал бы второй цикл вообще, т.к. можно запросить сразу все записи с помощью  mysql оператора IN:
Код

$query = "SELECT * FROM my_table";
$result = mysql_query ($query)
  or die ("Query failed");
while ($line = mysql_fetch_array($result))
{
    $query = "SELECT * FROM my_table2 WHERE ID IN ". $line['ids'];
    $res = mysql_query ($query2);
    $arr = mysql_fetch_array($res);
    $print .= $arr['data'].", ";
    }
echo $line['ids']."<i>".$res['data'].</i><br />;                                
}


Что ещё можно было бы изменить - не хранить id других записей через запятую, а создать отдельную таблицу связей. Но это дело архитектуры и не зная, как изначально выглядит задача,такое решение сложно принять.
Касательно проблемы - вообщем-то если проблема была в том, что выводится name от первой строки(id = 1),  то схема тут не при чем, просто где-то что-то криво в коде и надо кидать код сам,который сейчас используется.

Автор: smashTeAm 4.1.2008, 18:33
подскажите пожалуйста, как, на основе поста №3 этой темы. свой код приводить не стану ибо код форума будет не всем понятен. напишите как и что мне сделать чтоб получить желанный результат. пусть хоть примерно, ибо мне потом на форумный код переделывать придётся, и с мускулом я не особо дружен, но буду рад любым предложениям как сделать

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