【问题标题】:PHP mysqli table query gives multiple results that i want to query against another tablePHP mysqli 表查询给出了我想针对另一个表查询的多个结果
【发布时间】:2013-02-28 05:17:37
【问题描述】:

我一直在开发一个社交网络,我有一个粉丝页面表,用户可以为他们最喜欢的乐队或名人创建个人资料,还有一个名为朋友的表,他们可以订阅粉丝页面。然后,我希望请求出现在粉丝页面管理员的通知中,以除外。 在第一个 sql 查询之后,它返回具有多个值的粉丝页面,但是如果我回显下一个 $sql 查询,它表明它只选择一个结果来查询而不是全部。

所以基本上我需要查询用户登录的所有粉丝页面($log_username)的粉丝页面表,然后我需要获取这些粉丝页面并查询朋友表以了解是否有人请求订阅用户的粉丝页面??

感谢您的帮助迈克尔

    <?php
$fanpage_requests = '';

$fansql = "SELECT created_by, fanpage_name FROM `fanpages`  WHERE created_by = '$log_username' ";
$fanquery = mysqli_query($db_conx, $fansql);
$fannumrows = mysqli_num_rows($fanquery);

if($fannumrows < 1){
    $fanpage_requests = 'No friend requests';
} else {

    while($row = mysqli_fetch_array($fanquery, MYSQLI_ASSOC)) {
        $fanpage_name = $row["fanpage_name"];
        $created_by = $row["created_by"];

        $fansubSql = "SELECT * FROM friends WHERE user2='$fanpage_name' AND accepted='0' ORDER BY datemade ASC";
        $fansubQuery = mysqli_query($db_conx, $fansubSql);
        $fansubNumrows = mysqli_num_rows($fansubQuery);
        //print_r ($fansubNumrows);     
        if($fansubNumrows < 1){
            $fanpage_requests = "blah blah"; 
        }
        print_r ($fansubNumrows);
        while ($fansubRow = mysqli_fetch_array($fansubQuery, MYSQLI_ASSOC)) {
            $fansubreqID = $fansubRow["id"];
            $fansubuser1 = $fansubRow["user1"];
            $fansubdatemade = $fansubRow["datemade"];
            $fansubdatemade = strftime("%B %d", strtotime($fansubdatemade));

            $fansubthumbquery = mysqli_query($db_conx, "SELECT avatar FROM users WHERE username='$fansubuser1' LIMIT 1");
            $fansubthumbrow = mysqli_fetch_row($fansubthumbquery);
            $fansubuser1avatar = $fansubthumbrow[0];
            $fansubuser1pic = '<img src="user/'.$fansubuser1.'/'.$fansubuser1avatar.'" alt="'.$fansubuser1.'" class="user_pic">';

            if($fansubuser1avatar == NULL){
                $fansubuser1pic = '<img src="images/avatardefault.jpg" alt="'.$fansubuser1.'" class="user_pic">';
            }

            $fanpage_requests .= '<div id="friendreq_'.$fansubreqID.'" class="friendrequests">';
            $fanpage_requests .= '<a href="user.php?u='.$fansubuser1.'">'.$fansubuser1pic.'</a>';
            $fanpage_requests .= '<div class="user_info" id="user_info_'.$fansubreqID.'">'.$fansubdatemade.' <a href="user.php?u='.$fansubuser1.'">'.$fansubuser1.'</a> requests friendship<br /><br />';
            $fanpage_requests .= '<button onclick="fanReqHandler(\'accept\',\''.$fansubreqID.'\',\''.$fansubuser1.'\',\'user_info_'.$fansubreqID.'\')">accept</button> or ';
            $fanpage_requests .= '<button onclick="fanReqHandler(\'reject\',\''.$fansubreqID.'\',\''.$fansubuser1.'\',\'user_info_'.$fansubreqID.'\')">reject</button>';
            $fanpage_requests .= '</div>';
            $fanpage_requests .= '</div>';
        }
    }
}
?>

print_r 输出现在是 001110,我得到 blah blah

【问题讨论】:

  • 您的第一个循环设置为$fanpage_name,但您在执行任何其他操作之前将其关闭,因此所有其他操作都发生在该循环之外,只需使用$fanpage_name 的最后一个值。您需要稍后关闭循环。
  • 我认为也是如此,但我将 end } 移到代码的末尾,我仍然只得到 1 个结果(这是一个不同的结果,它不是一个订阅的结果请求)基本上第一个查询返回(fan1,fan2,fan3,fan4)由登录用户创建的所有页面,它返回由创建并具有订阅请求的fan4,但将}移动到代码末尾给了我fan1是创建的由登录用户但没有订阅请求?
  • 迈克尔,你能附上你得到的输出吗?
  • 我得到了,SELECT * FROM friends WHERE user2='fan4' AND accepted='0' ORDER BY datemade ASC from the $fanpage_requests = "$friendsSql";代码行
  • 那么你只得到这一行输出吗?如果是这样,那么第一个查询(来自fanpages)只返回一行,所以我想说只有fanpage_name 'fan4' 满足第一个查询条件。 $log_username创建了多少粉丝页面?

标签: php mysqli


【解决方案1】:

好的,所以确定您需要稍后关闭循环,它不能正常工作的原因是因为现在您在不同的循环中使用相同的变量,所以值被覆盖(例如$query)。

您需要根据需要不同的所有变量清楚地区分循环:

<?php
    $friend_requests = '';

    $sql = "SELECT created_by, fanpage_name FROM `fanpages`  WHERE created_by = '$log_username' ";
    $query = mysqli_query($db_conx, $sql);
    $numrows = mysqli_num_rows($query);

    if($numrows < 1){
        $friend_requests = 'No friend requests';
    } else {

        while($row = mysqli_fetch_array($query, MYSQLI_ASSOC)) {
            $fanpage_name = $row["fanpage_name"];
            $created_by = $row["created_by"];

            $friendsSql = "SELECT * FROM friends WHERE user2='$fanpage_name' AND accepted='0' ORDER BY datemade ASC";
            $friendsQuery = mysqli_query($db_conx, $friendsSql);
            $friendsNumrows = mysqli_num_rows($friendsQuery);
            $fanpage_requests = "$friendsSql";

            if($friendsNumrows < 1){
                $fanpage_requests = "$fanpage_name"; **//this shows that only 1 query is being queried in this second sql statement**
            }

            while ($friendsRow = mysqli_fetch_array($friendsQuery, MYSQLI_ASSOC)) {
                $reqID = $friendsRow["id"];
                $user1 = $friendsRow["user1"];
                $datemade = $friendsRow["datemade"];
                $datemade = strftime("%B %d", strtotime($datemade));

                $thumbquery = mysqli_query($db_conx, "SELECT avatar FROM users WHERE username='$user1' LIMIT 1");
                $thumbrow = mysqli_fetch_row($thumbquery);
                $user1avatar = $thumbrow[0];
                $user1pic = '<img src="user/'.$user1.'/'.$user1avatar.'" alt="'.$user1.'" class="user_pic">';

                if($user1avatar == NULL){
                    $user1pic = '<img src="images/avatardefault.jpg" alt="'.$user1.'" class="user_pic">';
                }

                $fanpage_requests .= '<div id="friendreq_'.$reqID.'" class="friendrequests">';
                $fanpage_requests .= '<a href="user.php?u='.$user1.'">'.$user1pic.'</a>';
                $fanpage_requests .= '<div class="user_info" id="user_info_'.$reqID.'">'.$datemade.' <a href="user.php?u='.$user1.'">'.$user1.'</a> requests friendship<br /><br />';
                $fanpage_requests .= '<button onclick="fanReqHandler(\'accept\',\''.$reqID.'\',\''.$user1.'\',\'user_info_'.$reqID.'\')">accept</button> or ';
                $fanpage_requests .= '<button onclick="fanReqHandler(\'reject\',\''.$reqID.'\',\''.$user1.'\',\'user_info_'.$reqID.'\')">reject</button>';
                $fanpage_requests .= '</div>';
                $fanpage_requests .= '</div>';
            }
        }
    }
?>

【讨论】:

  • 好的,我尝试了你的代码,我仍然得到相同的结果,它使用最后一个结果 fan4 来搜索朋友表中的记录,而不是循环和查询 fan1、fan2、fan3 和 fan4 来查看如果他们要求订阅
  • @MichaelFrost - 请执行查询 SELECT created_by, fanpage_name FROM fanpages WHERE created_by = 'insert log_username here',复制结果输出,然后编辑 your 问题并将复制的输出粘贴到 your 问题。
  • ok 查看第一个查询返回的内容,它只返回 fan4 但检查数据库我有 2 条记录等待登录用户排除
  • @MichaelFrost - 当然,如果您选择“登录用户”的记录,您正在执行相同的查询,无论是通过 PHP 还是通过您使用的任何查询工具。你是如何检查数据库的?您正在运行什么查询以获取 2 条记录?我相信现在的问题在于您的数据,而不是代码。
  • 我正在使用 phpmyadmin 检查表中的数据
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-21
  • 2016-11-03
  • 1970-01-01
  • 2010-10-31
  • 1970-01-01
  • 2014-08-18
相关资源
最近更新 更多