0

2 つの異なるテーブルから情報にアクセスして情報を取得しようとしていますが、テーブル tbl_fruits にリストされている果物の数を保留して、ユーザー情報を複数回取得しています。

ユーザー情報を一度表示するだけで、ユーザーに関連付けられた果物をいくつでも同時に取得できるようにしたいと考えています。

2 つのテーブル: tbl_users: ユーザー ID 名 姓

tbl_fruits: ユーザー ID フルーツ

コード例では、userID 4 には、tbl_fruit で彼に関連付けられた 3 つの果物があります。以下の結果からわかるように、ユーザー情報は複数回リストされています。ユーザー情報が 1 回プルされ、果物が 3 回表示されるようにコードを書き直すにはどうすればよいですか。

$clientID = "4";

try 
{    $stmt = $dbcon1 ->query("SELECT 
                tbl_fruits.fruit,
                tbl_users.userid,
                tbl_users.firstname,
                tbl_users.lastname
               FROM tbl_users
                 LEFT JOIN tbl_fruits 
               ON tbl_fruits.userid = tbl_users.userid     
                    WHERE  tbl_users.userid = '$clientID' ");                

    $testArray = $stmt->fetchAll(PDO::FETCH_ASSOC);            
} 
catch(PDOException $e) 
{    echo $e->getMessage(); }

echo '<pre>';
print_r($testArray);
echo '</pre>'; 

結果

array
(
    [0] => Array
        (
            [fruit] => Apple
            [userid] => 4
            [firstname] => John
            [lastname] => Smith
        )

    [1] => Array
        (
            [fruit] => Orange
            [userid] => 4
            [firstname] => John
            [lastname] => Smith
        )

    [2] => Array
        (
            [fruit] => Banana
            [userid] => 4
            [firstname] => John
            [lastname] => Smith
        )

)
4

1 に答える 1

0

以下のようにクエリを変更します。

{    $stmt = $dbcon1 ->query("SELECT 
                count(tbl_fruits.userid) 
                tbl_users.userid,
                tbl_users.firstname,
                tbl_users.lastname
               FROM tbl_users
                 LEFT JOIN tbl_fruits 
               ON tbl_fruits.userid = tbl_users.userid     
                    WHERE  tbl_users.userid = '$clientID' 
                    GROUP BY tbl_users.userid "); 

このcount(tbl_fruits.userid)部分は、その行の値が である一意の行の数をカウントしtbl_fruits.useridGROUP BY tbl_users.userid重複を排除します。

最高のパフォーマンスtbl_users.useridを得るには、必ずインデックスを付けてください。tbl_fruits.userid

于 2013-06-30T21:40:33.797 に答える