Задавайте вопросы, мы ответим
Вы не зашли.
Есть 3 таблицы.
books - берётся контент
chanels - места размещения
links - ссылки с размещенным контентом.
Когда места для размещения было одно, просто сравнивал чтобы id_books отсутствовал в таблице links.
Отредактированно spiderbuber (02.11.2022 06:31:24)
Неактивен
Неактивен
vasya написал:
select ... from books b left join links l on b.id_books = l.id_books and l.id_chanels='"+id_chanels+"' where l.id_books is null
Большое спасибо. Всё гениальное - просто)
Правильно ли я понял, что в вашей конструкции (используя лефт джойн) вот этот хвост:
Отредактированно spiderbuber (02.11.2022 06:21:16)
Неактивен
да
Неактивен
Привет!
Простите если не туда пишу, но я решила что эта ветка подходящая и не нужно создавать новую. У меня следующая проблема. Пытаюсь сделать меню.
Для этого мне нужно получить список категорий с сылками и описанием этих категорий. Две разные таблицы. Проблема в том, что я получила все нужные данные кроме ссылок на категории.
Запрос выглядит так:
return R::getAll("SELECT c.*, cd.* FROM cat c JOIN cat_desc cd ON c.id = cd.cat_parent WHERE c.cat_slug = ?", [$slug]);
Slug хранит в себе ссылку которая мне и нужна. Далее, в цикле, я передам ее каждому пункту меню.
Но я не могу получить ссылку из этого запроса, в этом и проблема. Можно ли как то добавить сюда еще cat_slug из таблицы с?
То есть, сейчас я передаю сюда слаг для формирования нужных мне данных. Но в итоге не могу получить этот слаг после формирования данных. В общем замкнутый круг.
Таблица -> cat
id parent_id cat_slug
1 0 слаг(ссылка на родительскую категорию)
2 0 слаг(ссылка на родительскую категорию)
3 1 слаг(ссылка которая мне нужна)
4 3 слаг(ссылка которая мне нужна)
//=================//
Таблица -> cat_desc
id cat_parent title
1 0 Название категории
2 0 Название категории
3 1 Название категории
4 3 Название категории
5 3 Название категории
Пожалуйста, помогите! Два дня уже мучаюсь и не могу ничего сделать.
Неактивен
У вас символьные идентификаторы (слаги) хранятся в таблице категорий. В чем проблема?
Smela написал:
Две разные таблицы.
Вообще странно (по нынешним меркам) хранить названия отдельно от символьных идентификаторов. У пунктов меню могут быть немного отличные от названий соответствующих категорий названия. В этом случае в отдельную таблицу выносят и названия, и символьные идентификаторы. Пусть вас это не смущает - таблица меню полностью отвязывается от таблицы категорий, т.е. становится общей. В этом случае вместо символьных идентификаторов в ней можно хранить любые (не только для категорий) материальные пути, например 'about/me'. Если же и названия пунктов меню всегда совпадают с названиями соответствующих категорий, и таблица "частная", то логично просто строить меню на основе таблицы категорий.
Зачем в таблице описаний хранить поле для связи с родительской категорией? И зачем вообще нужна таблица описаний? Вы действительно храните названия/описания категорий отдельно от категорий? Или это все же таблица меню?
Вы не свое название добавляете к категории. Замените
Smela написал:
JOIN cat_desc cd ON c.id = cd.cat_parent
на LEFT JOIN `cat_desc` USING(`id`). И не нужно выбирать все поля присоединяемой таблицы. Достаточно title. При необходимости можно переименовать: `cat_desc`.`title` [AS] `cat_title`
Smela написал:
WHERE c.cat_slug = ?
При формировании меню не нужна выборка по символьному идентификатору. Такая выборка выполняется при маршрутизации, т.е. когда нужно вывести соответствующую страницу. Или когда меню выводится частями, т.е. при помощи AJAX отдельными разделами.
Отредактированно estic (18.11.2022 13:33:46)
Неактивен
Благодарю Вас за ответ!
1.
Вообще странно (по нынешним меркам) хранить названия отдельно от символьных идентификаторов.
Я только учусь, так что не бейте больно
Я наверное не очень понятно описала что именно мне нужно. Буду пробовать дальше, может что то получится.
Отредактированно Smela (18.11.2022 14:43:27)
Неактивен
Smela написал:
а не нужный мне список подкатегорий
Так бы сразу и писали
С результатом более-менее разобрались. Теперь нужно разобраться с исходными данными. Неужели у вас нет в распоряжении числового идентификатора, что вы делаете выборку по символьному? Вариант AJAX с выборкой определенного раздела? И учтите, что когда делают выборку подкатегорий, в условии используют поле с родителем (все подкатегории одного уровня, если не брать в расчет другие ветви, - это те, у которых один родитель). А названия получайте тем способом, который я показал. Т.е. просто выбирайте подкатегории одного уровня по родителю, а потом, для получения названий подкатегорий, присоединяйте таблицу описаний по id. Вопрос о назначении поля для связи с родительской категорией в таблице описаний остается открытым. Также вы не подтвердили, что названия действительно нужно хранить в отдельной таблице. Проще поле title добавить в таблицу категорий и формировать меню исключительно на основе этой таблицы.
Посмотрел скриншот. Действительно вы разделили таблицу категорий на две части без каких-то видимых причин. Возможно, символьные идентификаторы позже добавили (но тогда почему таблица с ними называется cat?).
Отредактированно estic (19.11.2022 11:38:54)
Неактивен
Еще такая подсказка: если у вас используются только подкатегории одного уровня (как в таблицах на скриншоте), их можно выбирать одним простым запросом сразу для всех родителей. И родителей тоже можно выбирать этим же запросом. Для удобства вывода просто используйте в запросе сортировку по родителю в первую очередь. Тогда в выборке подкатегории (и родительские категории, если они включены в выборку) будут сгруппированы удобным для вывода образом.
Неактивен