Добрый день, господа программисты! Прочитайте пожалуйста и ответьте пожалуйста, если сможете =) Ситуация: Имеется база данных, таблица каталога и таблица цен(прайс) Пример кода: Как в данном случае сортировать каталог по цене?
Нет в запросе каталога такого столбца как цена. цены только в таблице прайс. Я так понял нужно состряпать пример. Мб не понятно написал
объедини две таблицы в одном запросе, отсортируй order by Добавлено спустя 1 минуту 31 секунду: запрос внутри цикла это всегда повод хорошенько подумать. тяжелые вещи надо из циклов выносить.
Вот такой код примерно у меня: Код (PHP): $catalog_q = mysqli_query($link, "SELECT * FROM catalog"); while ($rowcatalog = mysqli_fetch_array($catalog_q)){ $article_catalog = $rowcatalog[8]; $price_q = mysqli_query($link, "SELECT * FROM price where article = '$article_catalog'"); $rowprice = mysqli_fetch_array($price_q) if (!$price_q) { $price = "Нет в наличии" } else { $price = $rowprice[2]; } echo $rowcatalog[2]; //товар echo $price; //цена товара } Помогите объединить в 1 запросе. никогда так не делал! Спасибо! Подсказка от модератора: Любой код или текст конфигурации пишите между тегом [code=php] и [/code]. Используйте отступы в коде для форматирования текста. Это помогает быстрее понять вас, увеличивает шанс на получение ответа. Что выделять? Например: PHP, HTML, CSS, JavaScript, SQL, XML, .htaccess, ini, регулярные выражения, код шаблонизаторов, любая другая разметка, результаты array/object dump и т. д.
Замечание 1: Я не знаю что за поля прячутся за этим всем. Сначала SELECT *, а потом добывание по порядковому номеру поля. Да ты издеваешся! Это же ловушка для самого себя и того кто будет править за тобой. Что это блин за поле номер 8? Открой для себя mysqli_fetch_assoc() и старайся ЯВНО перечислять поля во фразе SELECT. Это сэкономит тебе многие часы жизни. Замечание 2: таблицы catalog и price отностся как 1:1 или 1:M ? Сколько цен может быть у товара? Попробую предположить что там за имена. Это первый запрос. Второй просто убираем. Код (PHP): SELECT c.*, p.price FROM catalog AS c LEFT JOIN price AS p ON c.id = p.cat_id ORDER BY p.price ASC Добавлено спустя 2 минуты 46 секунд: LEFT JOIN означает что в итоговой выборке будут все записи из catalog, даже если у какой-то из них нет соответствия в price. В таком случае p.price будет пустым. Если у одного товара есть несколько цен, то будут выведены все эти цены.
Хорошо, пока планируется одна цена на каждый артикул. Объясни мне запрос пожалуйста. Так понял я что в моем случае будет так: Код (PHP): $z = mysqli_query($link, "SELECT c.*, p.price FROM catalog AS c LEFT JOIN price AS p ON c.article = p.article ORDER BY p.price ASC"); while ($r = mysqli_fetch_array($z)){ echo $r['c.name']; //название товара echo $r['p.price']; //цена товара } Так будет? Если будет 2 цены то что будет на месте цены товара, последняя? Еще вопрос, допустим мне необходимо будет отсортировать данный запрос по полю из таблицы catalog, концовка будет такой? Код (PHP): ORDER BY с.vol ASC и Код (PHP): ORDER BY с.vol DESC Так же у меня будут условия выборки из таблицы catalog их вставлять сюда?: Код (PHP): FROM catalog AS c WHERE maker LIKE '$maker%' and gender LIKE '$genderq%' LEFT JOIN price AS p ON c.article = p.article Подсказка от модератора: Любой код или текст конфигурации пишите между тегом [code=php] и [/code]. Используйте отступы в коде для форматирования текста. Это помогает быстрее понять вас, увеличивает шанс на получение ответа. Что выделять? Например: PHP, HTML, CSS, JavaScript, SQL, XML, .htaccess, ini, регулярные выражения, код шаблонизаторов, любая другая разметка, результаты array/object dump и т. д.
Про всё остальное: уже пора пробовать, а не спрашивать. Запусти phpmyadmin и погоняй там новые запросы.