1

画像を明確にするために、アレイから始めます。データベースから両方の配列を取得します。

これが配列1の1つのレコードです

Array ( [0] => Array ( [vraag_id] => 2 [vraag_titel] => Je bent geen randdebiel he [categorie_id] => 1 [categorie_naam] => Eierstokkanker / Ovarium [gebruiker] => Bas Koesveld [reacties] => 13 [vraag_inhoud] => Omdat ik het zeg verdomme! [vraag_datum] => 2012-11-19 00:00:00 ) )

これがアレイ2の完全なレコードの一部です

Array ( [0] => Array ( [vraag_id] => 1 [resultaat] => 2 ) [1] => Array ( [vraag_id] => 2 [resultaat] => 1 ) [2] => Array ( [vraag_id] => 3 [resultaat] => 1 ) [3] => Array ( [vraag_id] => 4 [resultaat] => 1 ) [4] => Array ( [vraag_id] => 5 [resultaat] => 1 ) [5] => Array ( [vraag_id] => 6 [resultaat] => 1 ) [6] => Array ( [vraag_id] => 7 [resultaat] => 1 ) [7] => Array ( [vraag_id] => 8 [resultaat] => 1 ) [8] => Array ( [vraag_id] => 9 [resultaat] => 1 ) [9] => Array ( [vraag_id] => 10 [resultaat] => 1 ) [10] => Array ( [vraag_id] => 11 [resultaat] => 1 ) [11] => Array ( [vraag_id] => 12 [resultaat] => 1 ) )

配列2の列resultaatを、vraag_idが一致する配列1のレコードに追加したいと思います。

私はPHPにかなり慣れておらず、多くのことを試みてきましたが、成功しませんでした。私を助けることができる人はいますか?

編集:

コメントありがとうございます!もう少し明確にすべきだと思います。両方のコンテンツは同じテーブルからのものですが、クエリが異なります。クエリは次のとおりです。

SELECT T.id AS vraag_id, T.titel AS vraag_titel, C.id AS categorie_id, C.naam AS categorie_naam, L.gebruikersnaam AS gebruiker, P.inhoud AS vraag_inhoud, P.datum AS vraag_datum 
FROM categorie C
JOIN topic T ON C.id = T.categorie
JOIN post P ON T.id = P.vraag
JOIN lid L ON P.lid = L.id 
WHERE P.lid = 2 
ORDER BY P.datum DESC

これにより、データベースから望ましい結果が得られます。ここで、1つの質問に対する回答の数を数えたいと思います。これは、次のクエリで行います。

SELECT vraag AS vraag_id, COUNT( * )
FROM post
WHERE lid = 2
GROUP BY vraag_id

では、これらのクエリに参加するにはどうすればよいですか?

どうもありがとう!

4

2 に答える 2

1

できる最善のことは、クエリの結果をデータベースに結合することです。

そうは言っても、あなたの問題は非常に簡単に解決できます。

// rework your array2:
$temp = array();
foreach ($array2 as $index) {
    $temp[$index['vraag_id']]=$index['resultaat'];
}

// then add the resultaat to the right record:

for($i=0; $i< count($array1); $i++) {
    $array1[$i]['resultaat'] = $temp[$array1[$i]['vraag_id']];
}

ちなみに、SQL結合を使用して、より効率的でエレガントな方法で結果を取得することもできます。

このように2つのクエリを作成しようとしましたか?

SELECT T.id AS vraag_id, T.titel AS vraag_titel, C.id AS categorie_id, C.naam AS 
       categorie_naam, L.gebruikersnaam AS gebruiker, P.inhoud AS vraag_inhoud, 
       P.datum AS vraag_datum, res.resultaat 
FROM categorie C
JOIN topic T ON C.id = T.categorie
JOIN post P ON T.id = P.vraag
JOIN lid L ON P.lid = L.id 
JOIN (SELECT vraag AS vraag_id, COUNT( * ) as resultaat
    FROM post
    WHERE lid = 2
    GROUP BY vraag_id) as res ON T.id = res.id
WHERE P.lid = 2 
ORDER BY P.datum DESC

私は現在手元にあるmysqlを持っておらず、自分でテストすることはできませんが、タイプミスを除いては機能するはずです)。

秘訣は、同じテーブルでサブクエリを使用し、その場で結合することです

于 2012-11-22T16:36:58.733 に答える
0

最初の配列のvraag_idごとに2番目の配列のエントリが1つだけであると仮定すると、大まかに(そして最も単純に)次のようになります。

<?php

foreach ($array2 as $a2i)
{
    foreach ($array1 as $a1i)
    {
        if ($a2i['vraag_id'] == $a1i['vraag_id'])
        {
            $a1i['result'] = $a2i['resultaat'];
        }
    }
}

vraag_idごとに複数の結果を許可するには、些細な変更が必要になります。

または、(おそらく)LEFT JOINを使用して、データベースレベルでこれを実行します。

于 2012-11-22T16:27:18.740 に答える