2017-07-30 9 views
0

私はpdoだけを使って何かを計算したいと思います。このクエリから私が欲しいもの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このユーザー、実行します。

USER_IDは、クエリからこれです
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; 

。 これを問い合わせることは可能ですか?

$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で、同一のループを作りたい:

たぶん私は結果はPHPで見えるものになるかどうかが表示されます。

+0

編集あなたの質問をし、あなたに何を説明し

users.user_idが(本当にあなたのクエリがすべてで動作するために真である必要がある)一意であると仮定すると、クエリを実行します。 'select *'のようなスカラーサブクエリが必要なコンストラクトがあります。これは、そのコンテキストで決して使用しないでください。 –

+0

質問が編集されました:) – Matt

答えて

0

私が正しく理解していれば、特定のユーザーの特定の日付の後に投稿の合計が必要です。これは、JOINGROUP BYとして簡単に表現できます。

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を使用することができなくなります。 php foreachループのように、使用される(first_query、second_queryなどの)サブクエリごとにuser_idを渡す方法が不思議です。 – Matt

+0

'= ANY(ARRAY [....])'に配列を渡します。 –

関連する問題