Незнал как обозвать название темы В общем, задача. Есть код: Код (Text): <tr> <td class="td_7"><a href="#" class="A_2">Модель #</a></td> </tr> <tr> <td> </td> </tr> <tr> <td class="td_7"><a href="#" class="A_2">Модель #</a></td> </tr> <tr> <td> </td> </tr> </table> <table width="0" border="0" cellpadding="0" cellspacing="0" class="table_4"> <tr> <td class="td_12">Ещё модели:</td> </tr> <? $result = mysql_query("SELECT id FROM models WHERE status=1 ORDER BY cena DESC LIMIT 10",$db); $myrow = mysql_fetch_array($result); do { printf("<tr><td class='td_13'><a href='?id=profile&modelid=%s' class='A_3'>Модель %s</a></td></tr>",$myrow['id'],$myrow['id']); } while($myrow = mysql_fetch_array($result)); ?> Смысл в том что, там две разных таблицы. Тоесть выглядит это примерно так: Таблица первая: <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. В общем, как это все дело реализовать? Буду очень благодарен за любую помощь =)
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 Можно и в один запрос уложиться, но тогда придется усложнить логику и шаманить с циклами.
В первой таблице выводит все ОК. Во второй пишет: 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): <? defined('_JEXEC') or die('Restricted access'); ?> <a href="/"><img src="images/fone_01.jpg"></a><br><br></td> </tr> <? $result = mysql_query("SELECT id FROM models ORDER BY cena DESC LIMIT 2",$db); $myrow = mysql_fetch_array($result); do { printf(" <tr><td class='td_7'><a href='?id=profile&modelid=%s' class='A_2'>Модель %s</a></td></tr><tr><td> </td></tr>",$myrow['id'],$myrow['id']); } while($myrow = mysql_fetch_array($result)); ?> </table> <table width="0" border="0" cellpadding="0" cellspacing="0" class="table_4"> <tr> <td class="td_12">Ещё модели:</td> </tr> <? $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); $myrow = mysql_fetch_array($result); do { printf("<tr><td class='td_13'><a href='?id=profile&modelid=%s' class='A_3'>Модель %s</a></td></tr>",$myrow['id'],$myrow['id']); } while($myrow = mysql_fetch_array($result)); ?> </table>
Так дела не будет. Либо делаешь через цикл while(), либо сам разбирайся в этих какашках. И ключевое слово WHERE в запросе упущено.
Код (Text): <? defined('_JEXEC') or die('Restricted access'); ?> <a href="/"><img src="images/fone_01.jpg"></a><br><br></td> </tr> <? $result = mysql_query("SELECT id FROM models ORDER BY `cena` DESC LIMIT 2",$db); while($row=mysql_fetch_array($result)) { $row_id = $row['id']; echo "<tr><td class='td_7'><a href='?id=profile&modelid=%s' class='A_2'>Модель $row_id</a></td></tr>"; } ?> </table> <table width="0" border="0" cellpadding="0" cellspacing="0" class="table_4"> <tr> <td class="td_12">Ещё модели:</td> </tr> <? $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); while($row=mysql_fetch_array($result)) { $row_id = $row['id']; echo "<tr><td class='td_13'><a href='?id=profile&modelid=%s' class='A_3'>Модель $row_id</a></td></tr>"; } ?> <?/* $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); $myrow = mysql_fetch_array($result); do { printf("<tr><td class='td_13'><a href='?id=profile&modelid=%s' class='A_3'>Модель %s</a></td></tr>",$myrow['id'],$myrow['id']); } while($myrow = mysql_fetch_array($result)); */?> </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
Код (Text): $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) то он выводит без проблем, ну тоесть выводит и свверху и снизу одинаковые модели. (Повторяет) Слезно прошу помощи Аминь =)
Допиши в конец запроса Код (Text): or exit(mysql_error($db)); Добавлено спустя 1 минуту 2 секунды: Ну то есть чтобы было Код (PHP): $result = mysql_query("...", $db) or exit(mysql_error($db));
This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery' Добавлено спустя 2 минуты 28 секунд: Это значит что версия MySQL не поддерживае LIMIT & IN/ALL/ANY/SOME?
Ну а дальше берёшь и просто копируешь текст ошибки и вставляешь его в гугл/яндекс - что больше нравится. И сразу же находишь ответ на свой вопрос. Например, такой: http://webhybrid.ru/prog/mysql/subquery-errors.php