За последние 24 часа нас посетил 18471 программист и 1689 роботов. Сейчас ищет 971 программист ...

Вывод с бд

Тема в разделе "PHP для новичков", создана пользователем s1dix, 1 ноя 2017.

  1. s1dix

    s1dix Новичок

    С нами с:
    18 сен 2017
    Сообщения:
    6
    Симпатии:
    0
    у меня есть в бд таблица product где есть столбец brand который содержит :
    samsung
    apple
    google
    и я знаю , что можно вывести из этой таблицы только samsung, вот так
    Код (Text):
    1. mysqli_query (" SELECT * FROM product WHERE brand ='samsung' ")
    Но как выводить выборочно например : только apple и samsung или samsung и google или все , я не понимаю как сформировать запрос , если можно пример
     
  2. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.861
    Симпатии:
    657
    Выборочно по чему? Если имеется в виду страница фильтра, то вы берете слаг значения фильтра из адреса, по нему определяете само значение и подставляете его в запрос. Можно и непосредственно значение слага подставлять, но это любительский подход. Например, имеем адрес вроде /brand/samsung, откуда берем второй компонент пути и пихаем его в запрос, предварительно или походу (есть такое понятие как подготовленные запросы) делая защиту от SQL-инъекции.
     
  3. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.861
    Симпатии:
    657
    Эээ... все-таки напишу, как это делается грамотно. По слагу samsung ищете запись в таблице брендов. Если находите такую запись, берете значение бренда (числовой идентификатор), которое и подставляете в финальный запрос.
    --- Добавлено ---
    P.S. Естественно, в таблице продуктов должны находиться не слаги или названия брендов, а их числовые идентификаторы. Это основы.
     
  4. sgtpepper2000

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

    С нами с:
    3 дек 2014
    Сообщения:
    71
    Симпатии:
    2
    Прямой ответ на ваш вопрос:
    Код (Text):
    1. SELECT * FROM product WHERE brand='samsung' OR brand='apple'
    Однако по уму сделать отдельную таблицу брендов, а в запрос подставлять id-шники брендов, а не строковые названия, как написал miketomilin.
    Тогда запрос стал бы таким:
    Код (Text):
    1. SELECT * FROM product WHERE brand_id=? OR brand_id=?
     
  5. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.861
    Симпатии:
    657
    Кстати, я только сейчас заметил, что ТС говорил про фильтр с двумя значениями одновременно.
    --- Добавлено ---
    В принципе мой вариант тоже будет работать, если для фильтра использовать не таблицу брендов, а таблицу с условиями, в том числе и сложными, для финального запроса. Однако такое практикуется, только когда число комбинаций (разных условий) небольшое. В противном случае используется т.н. конструктор запросов/условий. Для фильтрации с выбором одновременно по нескольким значениям одного признака часто используется не OR, а IN(...).
    --- Добавлено ---
    P.S. Для выбора ВСЕГО обычно запрос не усложняется до использования в условии полного множества значений признака, а наоборот упрощается: условие либо полностью убирается, либо упрощается до `brand`!=СЛУЖЕБНОЕ_ЗНАЧЕНИЕ_ИДЕНТИФИКАТОРА.
     
    s1dix нравится это.
  6. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.819
    Симпатии:
    1.333
    Адрес:
    Лень
  7. s1dix

    s1dix Новичок

    С нами с:
    18 сен 2017
    Сообщения:
    6
    Симпатии:
    0
    все понял , спасибо