MySQL запрос для получения связанных данных из другой таблицы для предлагаемых соединений - PullRequest
0 голосов
/ 10 января 2012

мы разрабатываем портал, подобный сайту социальной сети, с другой концепцией ... но из-за предложенных соединений мы столкнулись с запросами mysql ... мы пытаемся взять пользователей с данными similat ...

SELECT u.* 
    FROM educonnect_user u 
    LEFT OUTER JOIN  educonnect_user_qualification q ON u.id = q.user_id 
    LEFT OUTER  JOIN educonnect_user_contact a1 ON u.id = a1.user_id 
WHERE q.type_of_institution in 
        (
            SELECT type_of_institution 
            FROM educonnect_user_qualification qi 
            WHERE qi.user_id = 3
         ) 
      AND q.college in 
         (
             select college 
             from educonnect_user_qualification qc 
             where qc.user_id = 3
          ) 
      AND q.country in 
          (
             select country 
             from educonnect_user_qualification qco 
             where qco.user_id = 3
          ) 
      AND a1.country in 
          (
             select country 
             from educonnect_user_contact cc 
             where cc.user_id = 3
          ) 
      AND a1.state in 
          (
             select state 
             from educonnect_user_contact cs 
             where cs.user_id = 3
          )

Таким образом, я присоединяюсь к 10 таблицам ... но проблема в том, что где бы я ни дал оператор AND, результат не генерируется, и если я дал оператор OR, он возвращает всех пользователей ... свою логику, которую эти оператор будет выдавать знаете ... но для этой проблемы мне нужны различные предложения, которые будут работать эффективно ... иначе запрос можно изменить с помощью любого другого конкретного оператора ???

Ответы [ 2 ]

0 голосов
/ 10 января 2012

Надеюсь, это поможет ::

SELECT u.* 
    FROM educonnect_user u 
    LEFT OUTER JOIN  educonnect_user_qualification q ON u.id = q.user_id 
    LEFT OUTER  JOIN educonnect_user_contact a1 ON u.id = a1.user_id 
    left join educonnect_user_qualification qi on (q.type_of_institution=qi.type_of_institution and qi.user_id=3)
  left join educonnect_user_qualification qc  on (q.college=qc.college and qc.user_id=3)
  left join educonnect_user_qualification qco on (q.country=qco.country and qco.user_id=3)
  left join educonnect_user_contact cc on (a1.country=cc.country and cc.user_id=3)
  left join educonnect_user_contact cs on (a1.state=cs.state and cs.user_id=3)  
0 голосов
/ 10 января 2012

Вам не нужны все эти WHERE IN условия. Вам просто нужно where educonnect_user.user_id = 3, поскольку таблица educonnect_user объединена с двумя другими таблицами educonnect_user_qualification и educonnect_user_contact, поэтому объединение гарантирует, что для пользователя с id=3 поля: type_of_institution, college , country, .. (и другие поля) существуют в двух других таблицах для одного и того же пользователя, но вам нужно позаботиться о том, какой тип объединения вам нужен, в зависимости от того, какие поля вы хотите выбрать из своих таблиц Left, right. Поэтому я думаю, что следующий запрос, что вы ищете:

SELECT u.* 
FROM educonnect_user u 
LEFT OUTER JOIN  educonnect_user_qualification q ON u.id = q.user_id 
LEFT OUTER  JOIN educonnect_user_contact a1 ON u.id = a1.user_id 
where u.user_id = 3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...