За последние 24 часа нас посетили 63163 программиста и 1742 робота. Сейчас ищут 1092 программиста ...

Сортировка по цене

Тема в разделе "PHP и базы данных", создана пользователем Dekabrio, 16 мар 2016.

  1. Dekabrio

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

    С нами с:
    14 янв 2012
    Сообщения:
    26
    Симпатии:
    0
    Добрый день, господа программисты!
    Прочитайте пожалуйста и ответьте пожалуйста, если сможете =)
    Ситуация:
    Имеется база данных, таблица каталога и таблица цен(прайс)
    Пример кода:
    Как в данном случае сортировать каталог по цене?
     
  2. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    в запросе order by
     
  3. Dekabrio

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

    С нами с:
    14 янв 2012
    Сообщения:
    26
    Симпатии:
    0
    Нет в запросе каталога такого столбца как цена. цены только в таблице прайс. Я так понял нужно состряпать пример. Мб не понятно написал
     
  4. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    объедини две таблицы в одном запросе, отсортируй order by

    Добавлено спустя 1 минуту 31 секунду:
    запрос внутри цикла это всегда повод хорошенько подумать. тяжелые вещи надо из циклов выносить.
     
  5. Dekabrio

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

    С нами с:
    14 янв 2012
    Сообщения:
    26
    Симпатии:
    0
    Вот такой код примерно у меня:
    Код (PHP):
    1. $catalog_q = mysqli_query($link, "SELECT * FROM catalog");
    2.                     while ($rowcatalog = mysqli_fetch_array($catalog_q)){
    3.                         $article_catalog = $rowcatalog[8];
    4.                         $price_q = mysqli_query($link, "SELECT * FROM price where article = '$article_catalog'");
    5.                             $rowprice = mysqli_fetch_array($price_q)
    6.                             if (!$price_q) { $price = "Нет в наличии" } else { $price = $rowprice[2]; }
    7.                             echo $rowcatalog[2]; //товар
    8.                             echo $price; //цена товара  
    9.                     } 
    Помогите объединить в 1 запросе. никогда так не делал! Спасибо!

    Подсказка от модератора:
    Любой код или текст конфигурации пишите между тегом [code=php] и [/code].
    Используйте отступы в коде для форматирования текста.
    Это помогает быстрее понять вас, увеличивает шанс на получение ответа.
    Что выделять? Например: PHP, HTML, CSS, JavaScript, SQL, XML, .htaccess, ini, регулярные выражения, код шаблонизаторов, любая другая разметка, результаты array/object dump и т. д.
     
  6. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    Замечание 1: Я не знаю что за поля прячутся за этим всем. Сначала SELECT *, а потом добывание по порядковому номеру поля. Да ты издеваешся! Это же ловушка для самого себя и того кто будет править за тобой. Что это блин за поле номер 8?
    Открой для себя mysqli_fetch_assoc() и старайся ЯВНО перечислять поля во фразе SELECT. Это сэкономит тебе многие часы жизни.

    Замечание 2: таблицы catalog и price отностся как 1:1 или 1:M ? Сколько цен может быть у товара?

    Попробую предположить что там за имена. Это первый запрос. Второй просто убираем.
    Код (PHP):
    1. SELECT c.*, p.price
    2. FROM catalog AS c LEFT JOIN price AS p ON c.id = p.cat_id
    3. ORDER BY p.price ASC
    Добавлено спустя 2 минуты 46 секунд:
    LEFT JOIN означает что в итоговой выборке будут все записи из catalog, даже если у какой-то из них нет соответствия в price. В таком случае p.price будет пустым.

    Если у одного товара есть несколько цен, то будут выведены все эти цены.
     
  7. Dekabrio

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

    С нами с:
    14 янв 2012
    Сообщения:
    26
    Симпатии:
    0
    Хорошо, пока планируется одна цена на каждый артикул.
    Объясни мне запрос пожалуйста.
    Так понял я что в моем случае будет так:
    Код (PHP):
    1. $z = mysqli_query($link, "SELECT c.*, p.price
    2. FROM catalog AS c LEFT JOIN price AS p ON c.article = p.article
    3. ORDER BY p.price ASC");
    4. while ($r = mysqli_fetch_array($z)){
    5.   echo $r['c.name']; //название товара
    6.   echo $r['p.price']; //цена товара  
    7. } 
    Так будет? Если будет 2 цены то что будет на месте цены товара, последняя?

    Еще вопрос, допустим мне необходимо будет отсортировать данный запрос по полю из таблицы catalog, концовка будет такой?
    Код (PHP):
    1. ORDER BY с.vol ASC
    и
    Код (PHP):
    1. ORDER BY с.vol DESC
    Так же у меня будут условия выборки из таблицы catalog их вставлять сюда?:
    Код (PHP):
    1. 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 и т. д.
     
  8. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    Про всё остальное: уже пора пробовать, а не спрашивать. Запусти phpmyadmin и погоняй там новые запросы.