У меня есть база данных с mutliple один на многие таблицы. Он содержит вопросы и ответы от разных пользователей.Какова правильная структура SQL-запроса, который ссылается на несколько таблиц?
Когда я хочу выбрать определенный набор ответов, я нахожу, что я запускаю несколько вложенных запросов на выбор в разных таблицах.
Это всегда работало нормально и, казалось, делало все, в чем я нуждался, - однако запрос, который я только что написал, имеет больше вложенных запросов, чем обычно, и, кажется, вызывает внутреннюю ошибку сервера (журнал ошибок «mod_fcgid: чтение данных таймаут через 31 секунду ").
Мне интересно, если моя структура кода ужасно неэффективна и если есть лучший способ достичь моего запроса?
Вот мой текущий SQL
SELECT response_value, fk_intervention_id, fk_question_id FROM responses_submitted where fk_intervention_id in (
SELECT pk_intervention_id FROM interventions where fk_module_id = 4 and fk_country_id in
(SELECT fk_country_id from country_region where fk_region_id in
(SELECT fk_region_id from country_region where fk_country_id = 25)
)
AND year=2013)
AND fk_question_id in (119, 122, 100, 1363, 130, 119, 122, 125, 127, 126, 138, 140)
Стоит отметить: это прекрасно работает в MySQL Workbench, но когда я запускаю его через PDO это вызывает тайм-аут.
Далее отметим: упрощение запроса (удаление окончательного вложенного запроса) предотвратить ошибку, так что кажется, уверен, что это является проблемой тайм-аут со сложностью запроса
Хорошо спасибо! Я действительно не понимаю, как использовать JOINs, поэтому мне нужно научиться понимать ваш код: он почти работает, но выбирает все ответы только для одного вмешательства в регионе, а не для всех вмешательств в регионе. – Gideon
check out: http://blog.codinghorror.com/a-visual-explanation-of-sql-joins/ – Jeremy