powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / как сделать выборку?
10 сообщений из 10, страница 1 из 1
как сделать выборку?
    #39987535
khurshed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть таблицы
post (id, name, description, ...)
category (id, name)
tag (id, name)
post_to_category (post_id, category_id)
post_to_tag (post_id, tag_id)
tag_to_category (tag_id, category_id)

Допустим у нас имеются категории с id 1-2-3-4-5
Теги id - 6-7-8-9-10
тег 6 и 7 относятся к категории 2
тег 8 к категории 5
тег 10 к категории 4

как сделать выборку постов согласно алгоритму
взять все посты из категории 1,
из категории 2 те посты которые имеют теги 6 и 7
из категории 3 все посты
из категории 4 посты с тегами 10
из категории 5 посты с тегами 8

то есть, если идет связка категория +тег, то только те посты, которые имеют связку тег+категория
если нет тега то просто связка пост+категория
...
Рейтинг: 0 / 0
как сделать выборку?
    #39987659
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Схема кривая - допускает расхождение данных.
...
Рейтинг: 0 / 0
как сделать выборку?
    #39988027
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
khurshed
tag_to_category

Не нужен, он выходит из post_to_tag и post_to_category.
khurshed
как сделать выборку

Связывай post с post_to_tag/category да выбирай, в чём проблема? Синтаксиса join не знаешь?
...
Рейтинг: 0 / 0
как сделать выборку?
    #39988038
khurshed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
crutchmaster
khurshed
tag_to_category

Не нужен, он выходит из post_to_tag и post_to_category.


К сожалению не нужен, там связка именно какой тег относится к какой категории, поэтому нужен(

Еще там having нужен, если выбрано 2 тега из одной категории чтобы выбирались посты которые имеют оба тега... вот такая вот мутная тема
...
Рейтинг: 0 / 0
как сделать выборку?
    #39988039
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
khurshed
там связка именно какой тег относится к какой категории, поэтому нужен

Одна из таблиц post_to_category, post_to_tag, tag_to_category - лишняя и должна быть удалена. Это даже не обсуждается. Ибо ситуация, когда пост1 относится к категории1, и в то же время имеет тег1, который относится к категории2 - на такой [censored] структуре - как два пальца...
...
Рейтинг: 0 / 0
как сделать выборку?
    #39988050
khurshed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, ок, допустим что его нет. Без union можно сделать запрос? Сейчас сделано так
в одном запросе выбираем те посты в которых есть тег+категории. А в другом запросе те посты с категориями у которых нет тега потом объединяю их
...
Рейтинг: 0 / 0
как сделать выборку?
    #39988058
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
khurshed , создайте fiddle, что ли... В крайнем случае выложите скрипты CREATE TABLE + INSERT INTO с тест-данными (проверить на работоспособность! внешние ключи в никуда и алиасы БД - нафиг!). На модели гораздо проще, чем пальцами в воздухе крутить.
...
Рейтинг: 0 / 0
как сделать выборку?
    #39988060
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
khurshed
Без union можно сделать запрос?
Да запросто. Всего и делов, что правильно сформировать условия отбора (оптимум - вообще их скинуть во временную таблицу в приличном формате).
...
Рейтинг: 0 / 0
как сделать выборку?
    #39988071
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
khurshed
К сожалению не нужен, там связка именно какой тег относится к какой категории, поэтому нужен(

Не нужен совершенно. Связываешь post_to_tag и post_to_category получаешь это своё category_to_tag.

khurshed
Еще там having нужен

Не нужен.
khurshed
если выбрано 2 тега из одной категории чтобы выбирались посты которые имеют оба тега...

tag_id in (1,2) and category_id = 3
...
Рейтинг: 0 / 0
как сделать выборку?
    #39988107
khurshed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina
khurshed , В крайнем случае выложите скрипты CREATE TABLE + INSERT INTO с тест-данными (проверить на работоспособность! внешние ключи в никуда и алиасы БД - нафиг!). На модели гораздо проще, чем пальцами в воздухе крутить.



Вот примерно, индексы не стал писать, а так в основном стоят

CREATE TABLE `post` (
`id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
`name` varchar(255) NOT NULL,
`alias` varchar(255) NOT NULL
) ENGINE='InnoDB';

INSERT INTO `post` (`name`, `alias`)
VALUES ('первый пост', 'pervyi'), ('Второй', 'vtoroy'),
('Третий', 'tr'), ('Четтверый', 'chetvertyi'), ('Пятый', 'pyatyi'), ('Шестой', 'shestoy');

CREATE TABLE `category` (
`id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
`name` varchar(255) NOT NULL
) ENGINE='InnoDB' COLLATE 'utf8_general_ci';


INSERT INTO `category` (`name`)
VALUES ('Первая'), ('Вторая'), ('Третья'), ('Четвертая'), ('Пятая');

CREATE TABLE `tag` (
`id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
`name` varchar(255) NOT NULL
) ENGINE='InnoDB' COLLATE 'utf8_general_ci';

INSERT INTO `tag` (`name`)
VALUES ('первый'), ('Второй'), ('Третий'), ('Четтверый'),
('Пятый'), ('ШЕстой'), ('Седьмой'), ('Восьмой'), ('Девятый'), ('Дестый');

CREATE TABLE `post_to_category` (
`post_id` int(11) NOT NULL,
`category_id` int(11) NOT NULL
) ENGINE='InnoDB' COLLATE 'utf8_general_ci';


INSERT INTO `post_to_category` (`post_id`, `category_id`)
VALUES (1,1), (1,2), (2,5), (3,2), (5,5), (6,4);


CREATE TABLE `post_to_tag` (
`post_id` int(11) NOT NULL,
`tag_id` int(11) NOT NULL
) ENGINE='InnoDB' COLLATE 'utf8_general_ci';


INSERT INTO `post_to_tag` (`post_id`, `tag_id`)
VALUES (1,6), (1,7), (2,2), (7,2), (2,10), (4,10), (5,8);



CREATE TABLE `tag_to_category` (
`tag_id` int(11) NOT NULL,
`category_id` int(11) NOT NULL
) ENGINE='InnoDB' COLLATE 'utf8_general_ci';


INSERT INTO `tag_to_category` (`category_id`, `tag_id`)
VALUES (2,6), (2,7), (4,10), (5,8);
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / как сделать выборку?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]