0

我正在尝试从 2 个不同的表中访问信息并检索信息,但这一切都在多次提取用户信息,等待表 tbl_fruits 中列出了多少水果。

喜欢能够一次显示用户信息并同时提取与用户相关的任何数量的水果。

2 个表:tbl_users:用户 ID 名字姓氏

tbl_fruits:用户 ID 水果

在示例代码中,用户 ID 4 在 tbl_fruit 中有 3 个与他关联的水果。从下面的结果可以看出,用户信息被多次列出。如何重写代码,使用户信息被拉一次,结果显示 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.userid,而该GROUP BY tbl_users.userid部分消除了重复项。

一定要建立一个索引tbl_users.useridtbl_fruits.userid获得最佳性能。

于 2013-06-30T21:40:33.797 回答