|
как сделать выборку?
|
|||
---|---|---|---|
#18+
Есть таблицы 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 то есть, если идет связка категория +тег, то только те посты, которые имеют связку тег+категория если нет тега то просто связка пост+категория ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2020, 15:47 |
|
как сделать выборку?
|
|||
---|---|---|---|
#18+
Схема кривая - допускает расхождение данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2020, 20:23 |
|
как сделать выборку?
|
|||
---|---|---|---|
#18+
khurshed tag_to_category Не нужен, он выходит из post_to_tag и post_to_category. khurshed как сделать выборку Связывай post с post_to_tag/category да выбирай, в чём проблема? Синтаксиса join не знаешь? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2020, 06:12 |
|
как сделать выборку?
|
|||
---|---|---|---|
#18+
crutchmaster khurshed tag_to_category Не нужен, он выходит из post_to_tag и post_to_category. К сожалению не нужен, там связка именно какой тег относится к какой категории, поэтому нужен( Еще там having нужен, если выбрано 2 тега из одной категории чтобы выбирались посты которые имеют оба тега... вот такая вот мутная тема ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2020, 08:24 |
|
как сделать выборку?
|
|||
---|---|---|---|
#18+
khurshed там связка именно какой тег относится к какой категории, поэтому нужен Одна из таблиц post_to_category, post_to_tag, tag_to_category - лишняя и должна быть удалена. Это даже не обсуждается. Ибо ситуация, когда пост1 относится к категории1, и в то же время имеет тег1, который относится к категории2 - на такой [censored] структуре - как два пальца... ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2020, 08:27 |
|
как сделать выборку?
|
|||
---|---|---|---|
#18+
Akina, ок, допустим что его нет. Без union можно сделать запрос? Сейчас сделано так в одном запросе выбираем те посты в которых есть тег+категории. А в другом запросе те посты с категориями у которых нет тега потом объединяю их ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2020, 09:03 |
|
как сделать выборку?
|
|||
---|---|---|---|
#18+
khurshed , создайте fiddle, что ли... В крайнем случае выложите скрипты CREATE TABLE + INSERT INTO с тест-данными (проверить на работоспособность! внешние ключи в никуда и алиасы БД - нафиг!). На модели гораздо проще, чем пальцами в воздухе крутить. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2020, 09:54 |
|
как сделать выборку?
|
|||
---|---|---|---|
#18+
khurshed Без union можно сделать запрос? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2020, 09:55 |
|
как сделать выборку?
|
|||
---|---|---|---|
#18+
khurshed К сожалению не нужен, там связка именно какой тег относится к какой категории, поэтому нужен( Не нужен совершенно. Связываешь post_to_tag и post_to_category получаешь это своё category_to_tag. khurshed Еще там having нужен Не нужен. khurshed если выбрано 2 тега из одной категории чтобы выбирались посты которые имеют оба тега... tag_id in (1,2) and category_id = 3 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2020, 10:19 |
|
как сделать выборку?
|
|||
---|---|---|---|
#18+
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); ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2020, 11:52 |
|
|
start [/forum/topic.php?fid=47&msg=39988038&tid=1828420]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
31ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
others: | 257ms |
total: | 387ms |
0 / 0 |