За последние 24 часа нас посетили 24587 программистов и 1729 роботов. Сейчас ищут 975 программистов ...

Вывод из БД построчнно, но не обычно :-)

Тема в разделе "PHP для новичков", создана пользователем q0b3rMAN, 9 дек 2012.

  1. q0b3rMAN

    q0b3rMAN Активный пользователь

    С нами с:
    11 июн 2011
    Сообщения:
    142
    Симпатии:
    0
    Незнал как обозвать название темы :)
    В общем, задача. Есть код:
    Код (Text):
    1.           <tr>
    2.             <td class="td_7"><a href="#" class="A_2">Модель #</a></td>
    3.           </tr>
    4.           <tr>
    5.             <td>&nbsp;</td>
    6.           </tr>
    7.           <tr>
    8.             <td class="td_7"><a href="#" class="A_2">Модель #</a></td>
    9.           </tr>
    10.           <tr>
    11.             <td>&nbsp;</td>
    12.           </tr>
    13.         </table>
    14.           <table width="0" border="0" cellpadding="0" cellspacing="0" class="table_4">
    15.             <tr>
    16.               <td class="td_12">Ещё модели:</td>
    17.             </tr>
    18.            
    19.             <?
    20.                 $result = mysql_query("SELECT id FROM models WHERE status=1 ORDER BY cena DESC LIMIT 10",$db);
    21.                 $myrow = mysql_fetch_array($result);
    22.                 do
    23.                 {
    24.                 printf("<tr><td class='td_13'><a href='?id=profile&modelid=%s' class='A_3'>Модель %s</a></td></tr>",$myrow['id'],$myrow['id']);
    25.                 }
    26.                 while($myrow = mysql_fetch_array($result));
    27.             ?>
    Смысл в том что, там две разных таблицы.
    Тоесть выглядит это примерно так:

    Таблица первая:
    <tr>Модель # </tr>
    <tr>Модель # </tr>

    Ниже нее - таблица вторая (между ними разделение сайта).
    <tr>Модель # </tr>
    <tr>Модель # </tr>
    <tr>Модель # </tr>
    <tr>Модель # </tr>
    и т.д. до LIMIT 10.

    Задача: Нужно выводить так, что-бы самые дорогие модели (по цене) были в первой таблице, но обязательно что-бы их было не более двух. Потом во второй таблице идут остальные модели, по ценам (чем дороже - тем выше).

    К примеру:
    Таблица 1:
    Модель #25 (Цена 30 000 рублей)
    Модель #90 (Цена 24 000 рублей)

    Таблица 2:
    Модель 36 (Цена 21 000 рублей)
    Модель 31 (Цена 19 000 рублей)
    Модель 32 (Цена 17 000 рублей)
    и т.д. в порядке уменьшения.

    Таблица 1 это:
    <tr><td class="td_7"><a href="#" class="A_2">Модель #</a></td></tr>

    Таблица 2 это:
    <tr><td class='td_13'><a href='?id=profile&modelid=%s' class='A_3'>Модель %s</a></td></tr> ....

    Сейчас они выводятся только в таблицу 2.
    В общем, как это все дело реализовать?

    Буду очень благодарен за любую помощь
    =)
     
  2. Апельсин

    Апельсин Активный пользователь

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    1. SELECT ... FROM `table` WHERE ... ORDER BY `price` DESC LIMIT 2
    2. SELECT ... FROM `table` WHERE ... `id` NOT IN (SELECT `id` FROM `table` WHERE ... ORDER BY `price` DESC LIMIT 2) ORDER BY `price` DESC LIMIT 10

    Можно и в один запрос уложиться, но тогда придется усложнить логику и шаманить с циклами.
     
  3. q0b3rMAN

    q0b3rMAN Активный пользователь

    С нами с:
    11 июн 2011
    Сообщения:
    142
    Симпатии:
    0
    В первой таблице выводит все ОК.
    Во второй пишет:
    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\OpenServer\domains\stroidecor\blocks\left_block.php on line 24

    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\OpenServer\domains\stroidecor\blocks\left_block.php on line 29


    Код всей страницы:
    Код (Text):
    1.  
    2.  
    3. <? defined('_JEXEC') or die('Restricted access'); ?>  
    4. <a href="/"><img src="images/fone_01.jpg"></a><br><br></td>
    5.           </tr>
    6.  
    7.             <?
    8.                 $result = mysql_query("SELECT id FROM models ORDER BY cena DESC LIMIT 2",$db);
    9.                 $myrow = mysql_fetch_array($result);
    10.                 do
    11.                 {
    12.                 printf(" <tr><td class='td_7'><a href='?id=profile&modelid=%s' class='A_2'>Модель %s</a></td></tr><tr><td>&nbsp;</td></tr>",$myrow['id'],$myrow['id']);
    13.                 }
    14.                 while($myrow = mysql_fetch_array($result));
    15.             ?>
    16.            
    17.          
    18.  
    19.         </table>
    20.           <table width="0" border="0" cellpadding="0" cellspacing="0" class="table_4">
    21.             <tr>
    22.               <td class="td_12">Ещё модели:</td>
    23.             </tr>          
    24.             <?
    25.                 $result = mysql_query("SELECT id FROM models NOT IN (SELECT id FROM models ORDER BY cena DESC LIMIT 2) ORDER BY cena DESC LIMIT 10",$db);
    26.                 $myrow = mysql_fetch_array($result);
    27.                 do
    28.                 {
    29.                 printf("<tr><td class='td_13'><a href='?id=profile&modelid=%s' class='A_3'>Модель %s</a></td></tr>",$myrow['id'],$myrow['id']);
    30.                 }
    31.                 while($myrow = mysql_fetch_array($result));
    32.             ?>
    33.           </table>
     
  4. Апельсин

    Апельсин Активный пользователь

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    Так дела не будет. Либо делаешь через цикл while(), либо сам разбирайся в этих какашках. И ключевое слово WHERE в запросе упущено.
     
  5. q0b3rMAN

    q0b3rMAN Активный пользователь

    С нами с:
    11 июн 2011
    Сообщения:
    142
    Симпатии:
    0
    Код (Text):
    1.  
    2. <? defined('_JEXEC') or die('Restricted access'); ?>  
    3. <a href="/"><img src="images/fone_01.jpg"></a><br><br></td>
    4.           </tr>
    5.         <?
    6.                 $result = mysql_query("SELECT id FROM models ORDER BY `cena` DESC LIMIT 2",$db);
    7.                
    8.                 while($row=mysql_fetch_array($result)) {
    9.                 $row_id = $row['id'];
    10.                
    11.                  echo "<tr><td class='td_7'><a href='?id=profile&modelid=%s' class='A_2'>Модель $row_id</a></td></tr>";
    12.                 }
    13.         ?>  
    14.         </table>
    15.        
    16.           <table width="0" border="0" cellpadding="0" cellspacing="0" class="table_4">
    17.             <tr>
    18.               <td class="td_12">Ещё модели:</td>
    19.             </tr>
    20.  
    21.         <?
    22.                 $result = mysql_query("SELECT id FROM models NOT IN (SELECT id FROM models ORDER BY `cena` DESC LIMIT 2) ORDER BY `cena` DESC LIMIT 10",$db);
    23.                
    24.                 while($row=mysql_fetch_array($result)) {     
    25.                 $row_id = $row['id'];      
    26.                
    27.                  echo "<tr><td class='td_13'><a href='?id=profile&modelid=%s' class='A_3'>Модель $row_id</a></td></tr>";
    28.                 }
    29.         ?>
    30.            
    31.             <?/*
    32.                 $result = mysql_query("SELECT id FROM models ORDER BY cena DESC LIMIT 2 NOT IN (SELECT id FROM models ORDER BY cena DESC LIMIT 2)",$db);
    33.                 $myrow = mysql_fetch_array($result);
    34.                 do
    35.                 {
    36.                 printf("<tr><td class='td_13'><a href='?id=profile&modelid=%s' class='A_3'>Модель %s</a></td></tr>",$myrow['id'],$myrow['id']);
    37.                 }
    38.                 while($myrow = mysql_fetch_array($result));
    39.             */?>
    40.           </table>
    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\OpenServer\domains\stroidecor\blocks\left_block.php on line 27
     
  6. FalkoN

    FalkoN Активный пользователь

    С нами с:
    1 апр 2011
    Сообщения:
    184
    Симпатии:
    0
    Адрес:
    Екатеринбург
    ... WHERE id NOT IN ...
     
  7. q0b3rMAN

    q0b3rMAN Активный пользователь

    С нами с:
    11 июн 2011
    Сообщения:
    142
    Симпатии:
    0
    Код (Text):
    1. $result = mysql_query("SELECT id FROM models WHERE id NOT IN (SELECT id FROM models ORDER BY `cena` DESC LIMIT 2) ORDER BY `cena` DESC LIMIT 10",$db);
    Тоже самое:
    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\OpenServer\domains\stroidecor\blocks\left_block.php on line 23

    Если убрать строку NOT IN (SELECT id FROM models ORDER BY `cena` DESC LIMIT 2) то он выводит без проблем, ну тоесть выводит и свверху и снизу одинаковые модели. (Повторяет)

    Слезно прошу помощи
    Аминь
    =)
     
  8. q0b3rMAN

    q0b3rMAN Активный пользователь

    С нами с:
    11 июн 2011
    Сообщения:
    142
    Симпатии:
    0
    Help me please :)
    Нужно сайт сдавать через пару часов, а вывод не готов.))
     
  9. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    А что значит коберман?
     
  10. q0b3rMAN

    q0b3rMAN Активный пользователь

    С нами с:
    11 июн 2011
    Сообщения:
    142
    Симпатии:
    0
    дуберман
    =)

    а мож о деле?)
     
  11. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Наверное это какая-то еврейская фамилия...
     
  12. q0b3rMAN

    q0b3rMAN Активный пользователь

    С нами с:
    11 июн 2011
    Сообщения:
    142
    Симпатии:
    0
    А с чего вы взяли что это фамилия? :)
     
  13. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Допиши в конец запроса
    Код (Text):
    1. or exit(mysql_error($db));
    Добавлено спустя 1 минуту 2 секунды:
    Ну то есть чтобы было
    Код (PHP):
    1. $result = mysql_query("...", $db) or exit(mysql_error($db)); 
     
  14. q0b3rMAN

    q0b3rMAN Активный пользователь

    С нами с:
    11 июн 2011
    Сообщения:
    142
    Симпатии:
    0
    This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'

    Добавлено спустя 2 минуты 28 секунд:
    Это значит что версия MySQL не поддерживае LIMIT & IN/ALL/ANY/SOME?
     
  15. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Ну а дальше берёшь и просто копируешь текст ошибки и вставляешь его в гугл/яндекс - что больше нравится. И сразу же находишь ответ на свой вопрос. Например, такой:
    http://webhybrid.ru/prog/mysql/subquery-errors.php
     
  16. q0b3rMAN

    q0b3rMAN Активный пользователь

    С нами с:
    11 июн 2011
    Сообщения:
    142
    Симпатии:
    0
    Ах, наконец то. Спасибо - все работает.