Помещение многократных вопросов mySQL в каждый усложнил тот

Мне очень трудно изучить, как построить более сложные вопросы в mySQL.

Хотелось бы надеяться, через этот вопрос я могу получить еще некоторое понимание относительно того, как развивать многоуровневые вопросы в едином запросе.

У меня есть система маркировки.

tbl1: ktbridge
ktbridge_id
threads_id
keywords_id

tbl2: threads
threads_id
subject
etc

tbl3: keywords
keywords_id
keyword
related_id

Выше мой настроенный ток.

Для данных я имею:

INSERT INTO `ktbridge` (`ktbridge_id`, `threads_id`, `keywords_id`) VALUES
(1, 1, 9);

INSERT INTO `keywords` (`keyword_id`, `keyword`, `related_id`) VALUES
(5, 'Sports', 0),
(6, 'Baseball', 5),
(7, 'football', 5),
(8, 'Curling', 5),
(9, 'Pitchers', 6),
(10, 'Catchers', 6),

INSERT INTO `threads` (`threads_id`, `subject`, `body`, `users_id`, `timestamp`, `replystamp`) VALUES
(1, 'Sports - Baseball - Pitchers - Subject', 'Sports - Baseball - Pitchers - Body', 1, '2013-01-09 14:09:40', '0000-00-00 00:00:00');

Цель здесь, должен возвратить нити, которые связаны с keyword_id, который обеспечивается.

Жесткая часть - то, что, если "бейсбол" отобран, он возвращает бейсбольные нити. Однако, если "спорт" отобран, это возвращает все нити ниже его, на основе "related_id" в ключевые слова стол. Таким образом, это возвратило бы все нити на основе бейсбола, футбола и завивания.

Действительно ли это - возможность? Или это потребует многократных вопросов? Заранее спасибо!

0
nl ja de
Обычно я одобряю ясность по эффективности и позволяю оптимизатору иметь дело с ним, как это будет.
добавлено автор hd1, источник

1 ответы

Это действительно требует многократных вопросов, но можно вложить их и выбрать из внутреннего избранного. Я думаю, что следующее должно работать (или, по крайней мере, начните вас). Обратите внимание, что это - MySQL, но должно быть портативно к другим системам RDBM:

SELECT * FROM `threads` WHERE `threads`.`threads_id` IN (
  SELECT `threads_id` FROM `ktbridge` WHERE `ktbridge`.`keywords_id` IN (
    SELECT `keywords_id` FROM `keywords` 
      WHERE `keywords`.`id` = 5 OR `keywords`.`related_id` = 5
    )
  );

доктор MySQL ссылка для "В"

1
добавлено
Ай да молодец. thank you. Это точно, что я спросил (и намного более простой, чем способ, которым я бросил вместе). Теперь экспериментировать с динамическим способом пойти далее, чем 1 связанная часть вниз...
добавлено автор Ricky Mason, источник
Спасибо за совет. Еще одна вещь, если вы don' t ум: Используя ktbridge стол.. я должен просто включать больше рядов, чтобы сохранить больше отношений? Или там была бы какая-либо выгода в создании намного более сложного php/dynamically созданным вопросом?
добавлено автор Ricky Mason, источник
Спасибо. очень интересный... Я полностью пропустил идею, что мне больше не был нужен ktbridge на способе, которым я осуществлял его на основе информации выше. Однако я думаю, что просто собираюсь пойти маршрут, где у каждой нити есть многократные признаки, и сохраняйте его способом, которым это теперь. Больше записей DB.. но кто заботится?
добавлено автор Ricky Mason, источник
Удачи... и btw, моя рекомендация состоит в том, чтобы стать очень знакомой с вашим предпочтительным инструментом DB (командная строка, phpmyadmin, whatevs) и просто попробовать различные вопросы, но также и, несомненно, должна будет попробовать тот же самый вопрос различным входом так, чтобы вы знали it' s не счастливая случайность данных.
добавлено автор jakerella, источник
У реального вопроса банка - нить, есть больше чем одно ключевое слово? Если так, тогда вам нужен ktbridge, чтобы нанести на карту каждую нить к каждому из it' s ключевые слова в дополнение к "связанному" отображению на самом столе ключевых слов. В противном случае можно убить тот стол и поместить id ключевого слова на стол нитей. Конечно, вы рассмотрели, могут ли у ключевого слова быть многократные отношения?:) Прямо сейчас это у вас только есть двухярусное, никакая пересекающаяся организация. Что относительно "Внутреннего" ключевого слова, в этом случае завивание действительно, но не бейсбол. Жаль, если I' m порождение вас больше работы!
добавлено автор jakerella, источник
DBA - русскоговорящее сообщество
DBA - русскоговорящее сообщество
1 345 участник(ов)

Общаемся и обсуждаем темы, посвященные DBA, PostgreSQL, Redis, MongoDB, MySQL, neo4j, riak и т.д. См. также: @devops_ru, @kubernetes_ru, @docker_ru, @nodejs_ru Рекомендуем сразу отключить уведомления, чтобы пребывание здесь было полезным и комфортным.

MySQL
MySQL
995 участник(ов)

The group is about MySQL. For code use hastebin.com. Admin: @smlkw