2014-03-03 164 views
0

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

我已经试过

  1. 我试图不LIMIT - 问题同
  2. 我也呼应了$ suggested_profile_id发现的所有3条记录出来。

这个就是被记录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 --> 

我在想什么?有没有其他办法可以实现这一点......谢谢!

+0

检查,在28个记录多少记录有'member_status ='activated'' – krishna

+0

@krishna有22个活动记录 – user3140617

+0

在你的第一个查询'DESC LIMIT 3'所以删除'LIMIT 3' – krishna

回答

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循环问题也会消失,但您的数据库访问也将更加高效。

+0

感谢队友这对我真的很有帮助。 – user3140617

+0

太棒了!我希望你会考虑接受答案,如果这是你正在寻找的。 –

+0

肯定会......并且它的工作原理! – user3140617