在另一个SQL查询中执行SQL查询

时间:2017-03-28 07:03:36

标签: php mysql sql-server web backend

好吧,我认为标题不是最好的标题,但让我解释一下我的问题:我创建了一个需要显示人物帖子的网站(无论如何),我必须展示他们的重头&&# 39; s个人资料图片,所以我这样做了:

<?php 
            function get_gravatar( $email, $s = 80, $d = 'mm', $r = 'g', $img = false, $atts = array() ) {
                $url = 'https://www.gravatar.com/avatar/';
                $url .= md5( strtolower( trim( $email ) ) );
                $url .= "?s=$s&d=$d&r=$r";
                if ( $img ) {
                    $url = '<img src="' . $url . '"';
                    foreach ( $atts as $key => $val )
                        $url .= ' ' . $key . '="' . $val . '"';
                    $url .= ' />';
                }
                return $url;
            }
            require("db.php");
            $sql = "SELECT * FROM posts ORDER BY date DESC";
            foreach ($db->query($sql) as $row) {
                // var_dump($row);
                $user = $row['user_id'];
                $sql_user = "SELECT email FROM users WHERE id = $user";
                foreach ($db->$sql_user as $row_user) {
                    var_dump($row_user);
                    echo "<img src=\"".get_gravatar($row_user['email'])."\"/>";
                }
                echo "<h2>".$row['title']."</h2><br/>";
                echo "<p>".$row['content']."</p><br/>";
            }

但是,它不起作用(嗯,它有效,但它没有向我显示用户的个人资料图片,只显示了帖子)。 所以,我认为问题是我不能同时调用变量$db的2倍,但我不确定,所以&#39; sm =为什么我&#39;问是否有办法解决我的问题或同时选择2个表。

5 个答案:

答案 0 :(得分:2)

你可以缩短你的逻辑

$sql="SELECT u.email "
                    . "FROM posts AS p "
                    . "LEFT JOIN users AS u "
                    . "ON u.id=p.user_id "
                    . "ORDER BY p.date DESC";

答案 1 :(得分:1)

使用join

SELECT * FROM users join posts  on users.id =Posts.user_id ORDER BY date DESC

答案 2 :(得分:1)

您可以使用JOIN

  

JOIN子句用于组合来自两个或多个表的行   他们之间的相关专栏。

答案 3 :(得分:1)

你没有在第二个foreach

中对sql字符串应用查询
  foreach ($db->query($sql_user) as $row_user) {

答案 4 :(得分:1)

看你的第二个foreach,你错过了查询功能

foreach ($db->query($sql) as $row) {



foreach ($db->query($sql_user) as $row_user) {