2017-07-30 100 views
0

我想只使用pdo來計算一些東西,而不是php。 我的查詢會是這個樣子:可以在postgre中像這樣創建foreach循環嗎?

WITH first_query as (
    SELECT date FROM users 
    WHERE user_id = 258; 
), second_query as (
    SELECT SUM(posts) FROM activity 
    WHERE date > (SELECT * FROM first_query) 
    AND user_id = 258; 
) 
SELECT user_id, date, first_time, (SELECT * FROM first_query), (SELECT * FROM second_query) 
FROM users WHERE user_id = 258; 

我想要什麼,要執行這個查詢,的foreach用戶從該查詢:

SELECT user_id FROM users 
WHERE country = 'PL'; 

示例:從查詢 用戶= 1,4,6 ,66,676,34,678,234; 的foreach這個用戶,執行:

WITH first_query as (
    SELECT date FROM users 
    WHERE user_id = 258; 
), second_query as (
    SELECT SUM(posts) FROM activity 
    WHERE date > (SELECT * FROM first_query) 
    AND user_id = 258; 
) 
SELECT user_id, date, first_time, (SELECT * FROM first_query), (SELECT * FROM second_query) 
FROM users WHERE user_id = 258; 

其中user_id是這從查詢。 有可能在查詢中做到這一點?

也許我將展示如何結果將在PHP來看看:

$users = 'select user_id from useres where something' // result as array 

foreach ($users as $user_id) { 
// execute query 

    WITH first_query as (
     SELECT date FROM users 
     WHERE user_id = $user_id; 
    ), second_query as (
     SELECT SUM(posts) FROM activity 
     WHERE date > (SELECT * FROM first_query) 
     AND user_id = $user_id; 
    ) 
    SELECT user_id, date, first_time, (SELECT * FROM first_query), (SELECT * FROM second_query) 
    FROM users WHERE user_id = $user_id; 

} 

我想在PDO相同的循環。

+0

編輯你的問題,並解釋你想要查詢。你有像'select *'這樣的構造,其中需要一個標量子查詢 - 你永遠不應該在這個上下文中使用它。 –

+0

問題編輯:)。 – Matt

回答

0

如果我理解正確,您希望給定用戶集合在特定日期之後的帖子總數。這更容易表述爲JOINGROUP BY

假設users.user_id是唯一的(這確實需要爲真爲你查詢到在所有的工作):

SELECT u.*, SUM(a.posts) 
FROM users u JOIN 
     activity a   
     ON a.user_id = u.user_id AND a.date > u.date 
WHERE u.user_id IN (1, 4, 6, 66, 676, 34, 678, 234) 
GROUP BY u.user_id; 

,或者更具體:

SELECT u.*, SUM(a.posts) 
FROM users u JOIN 
     activity a   
     ON a.user_id = u.user_id AND a.date > u.date 
WHERE u.country = 'PL' 
GROUP BY u.user_id 
+0

你是對的,但在某些情況下,它將不可能使用JOIN。我想知道,如何通過user_id,爲每個子查詢將使用(first_query,second_query和許多其他),如在PHP foreach循環:)。 – Matt

+0

將數組傳遞給'= ANY(ARRAY [....])' –

相關問題