Мистифицированный о том, как заставить работать динамический список двойных запросов PHP.Использование PHP 5.3.5 - PullRequest
0 голосов
/ 24 февраля 2011

Я пытаюсь создать динамический список (5 результатов строки) в php, сначала получая данные из одной таблицы, а затем используя результирующую переменную, чтобы получить последние загруженные "image_links" (только 1 от каждого из 5 художников) издругая таблица - затем эхо.

Код здесь дает мне только одну строку с последним изображением.Когда я закомментирую раздел кода «// Получить последнюю ссылку на изображение загружен ///», я получаю 5 строк разных исполнителей, которые мне действительно нужны, но, конечно же, без изображений.Я пытался (среди множества вещей) mysql_result () без оператора while, но это не сработало.

Так чего мне не хватает?

Спасибо, Аллен

  //// first get the artists followed  ////////////////
  $QUERY= "SELECT * FROM followArtist WHERE  user_id = $user_id "; 
    $res = mysql_query($QUERY);
    $num = mysql_num_rows($res);
    if($num>0){
         while($row = mysql_fetch_array($res)){
         $artist_name = $row['artist_name'];
         $artist_id = $row['artist_id'];         
         $date_lastSent = $row['date_lastSent'];
         $date_artPosted = $row['date_artPosted'];
         $date_notePosted = $row['date_notePosted'];

//// get new notice data /////           
          if ($date_artPosted >= $date_lastSent) {
              $artp = "new artwork posted";
               }else{
              $artp = "";      
          }
          if ($date_notePosted >= $date_lastSent) {
              $notep = "news/announcement posted";
               }else{
              $notep = "";     
          }
          if ($artp!="" && $notep!="") {
              $and = " and<br />";
               }else{
              $and = "";       
          }
          if ($artp=="" && $notep=="") {
              $no = "No new images or news posted since your<br /> last visit, but we'll let you know when there is.";
               }else{
              $no = "";    
          }

 //////// get the latest image link uploaded ////////////////////////////////////
           $QUERY2="SELECT image_link FROM artWork WHERE artist_id ='$artist_id' AND make_avail = '1'  ";
            //ORDER BY date_submit DESC
            $res = mysql_query($QUERY2);
            $num = mysql_num_rows($res);
            if($num>0 ){
                while($row = mysql_fetch_assoc($res)){
                  mysql_fetch_assoc($res);
                 $image_link= $row['image_link'];
                }   
 //////// end of get the latest images uploaded ////////////////////////////////                 
         echo "<tr align=\"center\" height=\"115px\">
                <td align=\"left\" width=\"15%\"> <a href=\"process_artist_idImages.php?artist_id=$artist_id&search=search\">
                                    <img src=slir/w115-h115/$path$image_link /></a></td> 
                <td align=\"center\" width=\"80%\"
                                    <span class=\"deviceMedLtGrayFont\">$artist_name</span>
                                    <br /><br />
                                    <a href=\"process_artist_idImages.php?artist_id=$artist_id&search=search\"/>
                                    $artp</a>
                                    <a href=\"process_artist_idImages.php?artist_id=$artist_id&search=search\"/>
                                    $and$no</a>
                                    <a href=\"process_artist_idImages.php?artist_id=$artist_id&search=search\"/>
                                    $notep</a>
                                    </td>
                </tr>";
        }  //// end bracket for getting latest image link
   } ///loop end for getting followed artist data
} ///end: if ($num>0) clause<code> 

Ответы [ 3 ]

0 голосов
/ 24 февраля 2011

Вы разделяете переменные $ num и $ res между двумя запросами ... ваши исходные свойства будут перезаписаны при запуске второго запроса. Используйте разные имена свойств для внутреннего запроса.

Пример проблемы:

$result = QueryA();

while( $row = $result->getRow() )
{
    // -- You're overwriting the original result here ...
    $result = QueryB();

    // Next time the loop runs, it will run using the result from QueryB();
}

Так что меняйся ...

    $res = mysql_query($QUERY2);
    $num = mysql_num_rows($res);

    if($num>0 )
    {
        while($row = mysql_fetch_assoc($res))
        {
            mysql_fetch_assoc($res);
            $image_link= $row['image_link'];
        }

до

    $res2 = mysql_query($QUERY2);
    $num2 = mysql_num_rows($res2);

    if($num2 > 0)
    {
        while($row2 = mysql_fetch_assoc($res2))
        {
            $image_link= $row2['image_link'];
        }
0 голосов
/ 24 февраля 2011

это беспорядок - как другие говорили, что вы используете одни и те же переменные для разных целей.

То, что вы храните целые числа, которые, по-видимому, представляют перечисления в поле типа char, является плохим.

Вы перебираете второй набор результатов, чтобы найти последнюю запись (из несортированного набора результатов!).

Вам нужен только один запрос - не 2.

SELECT f.artist_name, f.artist_id, f.dateLastSent....
   SUBSTR(
       MAX(
          CONCAT(DATE_FORMAT(date_submit, '%Y%m%d%H%i%s'), a.image_link)
       ), 15) as img_link
FROM followArtist f 
LEFT JOIN artWork a
   ON (a.artist_id=f.artist_id AND a.make_avail = '1')
WHERE user_id = $user_id
GROUP BY f.artist_name, f.artist_id, f.dateLastSent....
0 голосов
/ 24 февраля 2011

Если я правильно прочитал ваш код, я вижу, что вы зацикливаетесь, используя данные из query1 в структуре управления, и ищите query2 внутри каждого цикла.Вы повторно используете переменные в своей структуре элемента управления loop1 для query2 ($ num и дескриптор запроса ($ res)) для второго цикла.Вероятно, нежелательно в цикле.

...