簡體   English   中英

PHP查詢以聯接多個表行

[英]PHP query to Join multiple Table rows

我正在使用以下代碼進行查詢

 $statement = $conn->prepare('SELECT * FROM userFeeds WHERE userId = :userId ORDER BY creationDate ASC LIMIT 100');
                $statement->bindParam(':userId'    , $userId, PDO::PARAM_STR);
                $statement->execute();
                $posts = $statement->fetchAll(PDO::FETCH_ASSOC);

                return array('Success'=>$row, 'Posts'=>$posts);

每個帖子都有以下領域:

id   userId   comment  type  date

我也想獲取每個帖子的UserInfo以及帖子的其他字段。

當前在JSON中,我正在上面的字段,但是如果我想添加一個額外的字段“用戶”並將用戶傳遞給它,例如

foreach ($post in $posts)
{
   // PERFORM A QUERY TO GET USER FROM post=>userId
    $post['user'] = $user;
}

這個循環可能很長。 我可以設法做得更有效嗎?還是只用一個查詢?

每當遇到類似的問題時,下面的代碼段就是如何解決和減少查詢數量的示例:

# build an array of user ids
$userIds = array();
foreach ($posts as $post) {
    if (!in_array($post['userId'], $userIds)) {
        $userIds[] = (int)$post['userId'];
    }
}

# fetch these users.
$st = $conn->query('SELECT * FROM `users` WHERE `id` IN (' . implode(',', $userIds) . ')';
while ($row = $st->fetch(PDO::FETCH_ASSOC)) {
    $users[] = $row;
}

# assign users to posts.
foreach ($posts as $index => $post) {
    $posts[$index]['user'] = null;
    foreach ($users as $user) {
        if ($user['id'] == $post['userId']) {
            $posts[$index]['user'] = $user;
            break;
        }
    }
}

這樣做的基本前提是您提取所有相關的用戶ID,執行一次查詢以找到相關的用戶,然后將這些用戶重新分配回原始數組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM