Еще один запрос SQL в запросе al oop (строка) - PullRequest
0 голосов
/ 14 апреля 2020

Я борюсь с моим кодом. Я пытаюсь сделать новостную ленту.

Лента новостей работает хорошо, но теперь я хочу добавить аватарку в каждую строку новостей, чтобы иметь картинку от автора. Путь к аватарам находится в другой таблице (users).

Это означает, что мне нужно получить в oop указанный идентификатор пользователя c ($row['uid']), и с этим идентификатором мне нужно получить связанный путь от аватара пользователя в user Таблица.

Если я попытаюсь использовать запрос в моем l oop, он покажет мне только один результат вместо 6, как указано в моем запросе.

У вас есть какие-либо предложения или советы, как я могу решить эту проблему?

Большое спасибо за вашу поддержку!

Это моя попытка на данный момент:

            <div class="timeline p-4 block mb-4">

                <?php

                // Getting the user id and the feedmessage from Table "activity_feed"
                $statement = $pdo->prepare("SELECT feed_message, uid FROM activity_feed WHERE cid = :cid ORDER BY id DESC LIMIT 6");
                $result = $statement->execute(array('cid' => $cid));
                $count = 1;
                while($row = $statement->fetch()) 
                
                { 
                // Starting the News feed Loop
                ?>
                
                <?php

                // This will repeat now X times as defined in the query above by = LIMIT ?

                    // Getting the avatar path from the user table 
                    $statement = $pdo->prepare("SELECT avatar FROM users WHERE id = :id");
                    $result = $statement->execute(array('id' => $row['uid']));
                    $user_avatar = $statement->fetch(); 
                    ?>

                        <style>
                            #circle_feed {
                            height:50px;
                            width:50px;
                            border-radius:50%;
                            /* Including the avatar path from query above*/ 
                            background-image: url("<?php echo $user_avatar['avatar']; ?>");
                            background-position:center;
                            background-size:cover;
                                        }
                        </style>
                                

                    <div class="tl-item ">
                        <div class="tl-dot"><a class="tl-author" href="#" data-abc="true">
                        <!-- Including the Avatar circle here-->
                            <span class="w-40 avatar circle gd-warning border" id="circle_feed"></span></a>
                        </div>
                        <div class="tl-content">
                            <div class=""><?php echo $row['feed_message']; ?></div>
                            <div class="tl-date text-muted mt-1">DATE</div>
                        </div>
                    </div>                    

                  <?php 
                  // News Feed Loop is ending here
                    }       
                  ?>                   
                    
                </div>
            </div>

1 Ответ

1 голос
/ 14 апреля 2020

Нет необходимости в oop. SQL - это язык на основе множеств, который может выдавать нужные результаты в одном запросе с использованием синтаксиса join:

SELECT 
    af.feed_message, 
    af.uid,
    u.avatar
FROM activity_feed af
INNER JOIN users u ON u.id = af.uid
WHERE af.cid = :cid 
ORDER BY af.id DESC 
LIMIT 6

Это намного эффективнее, чем выполнение 7 запросов (один для канала активности - по одной для каждой строки, возвращаемой первым запросом, в PHP l oop).

Затем можно извлечь строки набора результатов и использовать их непосредственно в приложении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...