MySQL查询未正确显示所有记录

时间:2014-03-03 07:43:08

标签: php mysql sql

我的数据库正在运行查询以获取3条记录按Random排序。问题是,有时它显示所有3条记录,有时它只显示2,1,其他时间只是空白。在数据库中,我有大约28条记录。

我尝试了什么

  1. 我试过没有 LIMIT - 问题相同
  2. 我已经回复了 $ suggested_profile_id 发现了所有3条记录。
  3. 这是获取记录LIMIT it by 3

    的查询
    <?php
    $sql = "SELECT * FROM members WHERE member_status='activated' ORDER BY RAND() DESC LIMIT 3";
      $query = $db->SELECT($sql);
       if($db->NUM_ROWS() > 0){
         $rows = $db->FETCH_OBJECT();
    ?>
    

    这是在循环中运行并获取所有3条记录的代码。

    <!-- Suggested Friends -->
        <div class="col-md-0 media-body">
        <?php
        foreach($rows as $row){
            $member_id = $row->member_id;
            $sql = "SELECT * FROM profile WHERE profile_id='$member_id' LIMIT 1";
            $query = $db->SELECT($sql);
            $rows = $db->FETCH_OBJECT();
            foreach($rows as $row){
                $suggested_profile_id = $row->profile_id;
                $suggested_profile_photo = $row->profile_photo;
                $suggested_profile_username = $row->profile_username;
                $suggested_profile_name = $row->profile_name;
                    if(
                        $suggested_profile_id != GET_SESSION_ID_VALUE(ENCRYPTION_KEY)&&
                        !is_in_ARRAY($make_string_to_ARRAY, $suggested_profile_id) 
                    ){
        ?>
        <div class="row margin0">
          <div class="col-md-4 pad0">
            <a href="/<?php echo $suggested_profile_username; ?>" title="<?php echo $suggested_friends_profile_name; ?>" >
            <?php
              global $suggested_friends_profile_id;
              $member_dir = dirname(dirname(dirname(__FILE__))) . "/members/" . $suggested_profile_id ."/smalll_" . $suggested_profile_photo;
              if(file_exists($member_dir)){
            ?>
              <img alt="<?php echo $suggested_profile_name; ?>" title="<?php echo $suggested_profile_name; ?>" src="/members/<?php echo $suggested_profile_id; ?>/smalll_<?php echo $suggested_profile_photo; ?>" width="50" height="50">
            <?php   
              } else {
            ?>
              <img alt="<?php echo $suggested_profile_name; ?>" title="<?php echo $suggested_profile_name; ?>" src="/assets/images/default.jpg" width="50" height="50">
            <?php   
              }
            ?>
            </a>
          </div>
          <div class="col-md-8 pad0">
            <a href="<?php echo $suggested_profile_username; ?>" class="bold welcome-name"><?php echo $suggested_profile_name; ?></a>
            <span class="f12 gray">271 Mutual Friends</span>
            <a href="#" class="welcome-name">Add as friend</a>
         </div>
        </div>
        <?php
                    }
                }           
        }
        ?>
        </div>
        <!-- ** Suggested Friends -->
    

    我错过了什么?有没有其他方法可以实现这一目标...谢谢!

1 个答案:

答案 0 :(得分:1)

在我看来,你正在覆盖内部选择中的$rows变量。

foreach($rows as $row){ // <-- first $rows / $row
    $member_id = $row->member_id;
    $sql = "SELECT * FROM profile WHERE profile_id='$member_id' LIMIT 1";
    $query = $db->SELECT($sql);
    $rows = $db->FETCH_OBJECT(); <-- $rows overwritten
    foreach($rows as $row){ 

从您的应用程序逻辑中断您的显示,您将不会有这么难的调试这种事情。此外,你有很多重复的代码,这使得难以管理和难以调试。

此外,如果您运行了一个查询,则不会出现此问题:SELECT * FROM members JOIN profile ON members.member_id = profile.profile_id并且您的代码不仅会变得更简单,而且双重foreach循环问题也会消失,但您的数据库访问权限也会更多高效。