2014-09-09 1 views
0

У меня есть два запроса, и они довольно comlpex, поэтому я не могу понять, как присоединиться к ним.Как я могу присоединиться к этим двум сложным запросам?

Я хочу, чтобы найти результирующий набор, когда Q1.notAnyFewID = Q2.FBID из двух запросов

Q1:

SELECT DISTINCT notifications.`receiver` AS notAnyFewID 
FROM notifications 
JOIN 
(SELECT notifications.`ref` AS notRef, notifications.`receiver` AS recI 
    FROM notifications 
    WHERE notifications.`ref`='tooFewLandings') AS c 
ON notifications.`receiver`=c.recI 
WHERE notifications.`receiver`!=c.recI 

Q2:

SELECT DISTINCT R2PProfiles.id AS r2pID, R2PProfiles.`facebookID` AS FBID 
FROM R2PProfiles 
LEFT JOIN 
     (SELECT COUNT(*) AS Landings, R2PProfiles.facebookID, R2PProfiles.id 
      FROM pageTrack   
      JOIN (R2PProfiles) 
     ON (pageTrack.inputRefNum = R2PProfiles.id) 
WHERE pageTrack.ref='getProfile-Land' AND R2PProfiles.published=2 AND R2PProfiles.`createTime`< NOW()- INTERVAL 24 HOUR GROUP BY R2PProfiles.id) AS h 
USING (id) WHERE (Landings < 20) 

При попытке объединить их, я, кажется, всегда растрепаться вступать или присоединяться или подбирать или «использовать» или где и как получить новое, если оно правильно.

Каков наилучший подход для сопоставления одного из запросов с результатом другого?

+0

Почему бы не сделать это на другом языке программирования? –

+0

Becuase Я не хочу делать несколько вызовов в БД (некоторые из этих таблиц будут довольно большими, и различные отдельные запросы могут иметь много результатов, поэтому я не хочу иметь в них циклы с db-вызовами) – Per

+0

Это сложно. Вы пытаетесь присоединиться к результатам двух? Какова связь, IE, в какую колонку вы бы включили? Не смотря на это, я просто видел ваше редактирование. Спасибо за очистку кодовых блоков. – BClaydon

ответ

3

Просто поместите два запрос как подзапросы в JOIN

SELECT notAnyFewID, r2pID 
FROM (SELECT DISTINCT notifications.`receiver` AS notAnyFewID 
     FROM notifications 
     JOIN 
     (SELECT notifications.`ref` AS notRef, notifications.`receiver` AS recI 
      FROM notifications 
      WHERE notifications.`ref`='tooFewLandings') AS c 
     ON notifications.`receiver`=c.recI 
     WHERE notifications.`receiver`!=c.recI) AS q1 
JOIN (SELECT DISTINCT R2PProfiles.id AS r2pID, R2PProfiles.`facebookID` AS FBID 
     FROM R2PProfiles 
     LEFT JOIN 
       (SELECT COUNT(*) AS Landings, R2PProfiles.facebookID, R2PProfiles.id 
        FROM pageTrack   
        JOIN (R2PProfiles) 
       ON (pageTrack.inputRefNum = R2PProfiles.id) 
     WHERE pageTrack.ref='getProfile-Land' AND R2PProfiles.published=2 AND R2PProfiles.`createTime`< NOW()- INTERVAL 24 HOUR GROUP BY R2PProfiles.id) AS h 
     USING (id) WHERE (Landings < 20)) AS q2 
ON q1.notAnyFewID = q2.FBID 
+0

Да, это то, что я сейчас пытаюсь сделать. Думаю, я сейчас нахожусь на грани работы. (Я добрался до того же кода, но, похоже, что-то подозрительное с результатом, но я должен проверить данные, которые у меня есть) – Per