За последние 24 часа нас посетили 20444 программиста и 1110 роботов. Сейчас ищут 403 программиста ...

Вывести одним запросом все строки определенной категории

Тема в разделе "PHP для новичков", создана пользователем Konstant1n, 12 янв 2018.

  1. Konstant1n

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

    С нами с:
    14 авг 2017
    Сообщения:
    273
    Симпатии:
    1
    Адрес:
    Волгоград
  2. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    SELECT * FROM Articles WHERE cat_id IN(1);
     
    Konstant1n нравится это.
  3. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.734
    Симпатии:
    1.315
    Адрес:
    Лень
    SELECT t2.*
    FROM Categories t1
    LEFT JOIN Articles t2 ON t2.cat_id = t1.id
    WHERE t1.title = 'Фрукты'
     
    Konstant1n нравится это.
  4. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    @MouseZver ты в своих проектах также делаешь?
     
  5. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.734
    Симпатии:
    1.315
    Адрес:
    Лень
    в чем подвох ?
    --- Добавлено ---
    расскажи, заслужишь лайк ;)
     
  6. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    все просто.
    я ответил на вопрос ТСа.
    ты ниже даешь свой, типа более правильный, наверное.
    и вот мне интересно, ты правда считаешь что правильнее выбирать по названию категории, а не по идентификатору?
     
    MouseZver нравится это.
  7. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.734
    Симпатии:
    1.315
    Адрес:
    Лень
    всякое может быть, иначе зачем таблица 2
     
  8. Konstant1n

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

    С нами с:
    14 авг 2017
    Сообщения:
    273
    Симпатии:
    1
    Адрес:
    Волгоград
    как это по русски будет. объясни значения слов, плиз. select, *, from, where знаю )))

    Еще бы название категории вывести. Например,
    Фрукты: Банан, Яблоко, а не просто Банан, Яблоко
     
  9. Konstant1n

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

    С нами с:
    14 авг 2017
    Сообщения:
    273
    Симпатии:
    1
    Адрес:
    Волгоград
    другое имя вместо t1 и t2 можно задать?
     
  10. Konstant1n

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

    С нами с:
    14 авг 2017
    Сообщения:
    273
    Симпатии:
    1
    Адрес:
    Волгоград
    нашел. Проверьте плиз
    PHP:
    1. "SELECT t_cat.title as cat_title, t_art* FROM categories AS t_cat INNER JOIN articles AS t_art ON t_art.cat_id=t_cat.id WHERE t_cat.id = 1"
     
  11. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.734
    Симпатии:
    1.315
    Адрес:
    Лень
    угу
     
  12. Konstant1n

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

    С нами с:
    14 авг 2017
    Сообщения:
    273
    Симпатии:
    1
    Адрес:
    Волгоград
    А как мне еще название раздела вывести.
    Раздел самый высший, т.е. раздел->категории->записи
    --- Добавлено ---
    что?
     
  13. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.734
    Симпатии:
    1.315
    Адрес:
    Лень
  14. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.787
    Симпатии:
    646
    @Konstant1n обычно название раздела на момент выполнения запроса, который вы просили показать, уже известно.

    Вы сначала делаете запрос к таблице категорий по слагу или числовому id, чтобы убедиться, что такая категория действительно существует, и попутно получаете название, описание, числовой id (если запрос выполнялся по слагу) и т.п.
    --- Добавлено ---
    Для придания выдаче такого же вида, как и у запроса без фильтра присоединять по сути одно и то же к каждой статье не нужно (кстати, у
    MouseZver'а действительно странный запрос; нужно к статьям присоединять категории, а не наоборот). Можно подставить фактические данные, полученные в результате первого запроса, в результат второго или прямо во второй запрос:
    Код (Text):
    1. SELECT `articles`.*,`category_slug` "{$page['slug']}",`category_name` "{$page['name']}" FROM `articles` LEFT JOIN `category` USING(`category_id`) WHERE ...
     
  15. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.787
    Симпатии:
    646
    Эээ... Я переусердствовал в коде выше. Как написал перед кодом, присоединять не нужно. Присоединение вы делаете только в случае откл. фильтра:
    Код (Text):
    1.  
    2. SELECT `articles`.*,`category_slug`,`category_name` FROM `articles` LEFT JOIN `category` USING (`category_id`)
     
    #15 miketomlin, 15 янв 2018
    Последнее редактирование: 15 янв 2018
    Konstant1n нравится это.
  16. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.787
    Симпатии:
    646
    @Konstant1n, вчера не заметил вашу приписку про то, что у вас раздел != категория. Но принцип в общем-то тот же самый. Вот как будто специально под ваш вопрос писал: http://gency.ru/filter-items-by-level-of-hierarchy (в демке к статье показаны осн. запросы для каждого из трех уровней иерархии, без фильтра, с фильтром по разделам и с фильтром по категории раздела; подготовительные запросы делаете заранее).
    --- Добавлено ---
    В первом запросе выше сначала пишется строка с факт. данными, а потом алиас (явно на что-то отвлекался, когда писал этот запрос :) ):
    Код (Text):
    1. "{$page['slug']}" [AS] `category_slug` и т.п., AS можно опустить
     
    Konstant1n нравится это.
  17. Konstant1n

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

    С нами с:
    14 авг 2017
    Сообщения:
    273
    Симпатии:
    1
    Адрес:
    Волгоград
    Всем спасибо, ребят! Кто бы помог, если не Вы ;) Сейчас буду разбираться, учить, тестировать :)
     
  18. Konstant1n

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

    С нами с:
    14 авг 2017
    Сообщения:
    273
    Симпатии:
    1
    Адрес:
    Волгоград
    category_slug, category_name берутся из таблицы categories? Это названия столбцов? С примера на месте их какие будут поля?
     
  19. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.787
    Симпатии:
    646
    Да, из таблицы категорий. Да, названия столбцов, но можете сделать и алиасами, как в запросе с фильтрами, например у вас в примере имеется совпадение имени поля title в таблицах, поэтому делаете так: `categories`.`title` `cat_title`. Слаги в примере не используются.

    Имя поля с числовым id категории в таблицах различается, поэтому вместо USING() используете ON, а во избежание дублирования поля в результирующей выборке «не подтягиваете» его из присоединяемой таблицы, т.е. для примера достаточно выбирать такие поля: `articles`.*,`categories`.`title` `cat_title` (а в выражении ON используете `cat_id` и `categories`.`id`, если трудно добиться совпадения имени).

    Еще раз напоминаю, что присоединение делаете только в случае откл. фильтра. При выборе статей конкретной категории лучше делать так: `articles`.*,'{$data['title']}' `cat_title`, предварительно выбрав заголовок категории в $data['title'].
     
  20. Konstant1n

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

    С нами с:
    14 авг 2017
    Сообщения:
    273
    Симпатии:
    1
    Адрес:
    Волгоград
    можешь пример запроса написать для таблицы выше. вывести все заметки категории 1. и чтобы был title категории
     
  21. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.787
    Симпатии:
    646
    Я вроде по-русски написал, что заголовок лучше получать отдельным запросом, не? А в основном подставляете полученный ранее заголовок, как показано в пред. и не только посте, если нужно добиться подобия результату без фильтрации по категории (если не нужно, то и не поставляете). И естественно не забываете в конце написать WHERE `cat_id`=1.