2015-10-28 49 views
0


请问我一直在试图创建一个函数来查询数据库,从表中选择,如果行数不等于6,然后从表中的一行,并重复(或可能重复),直到行数等于6.我已经在StackOverflow中搜索此,但没有得到任何接近。如果你有类似的链接,请在这里发布,我会给它一个。

这里是我的代码:
如何在符合条件的函数中运行函数

//List All active adverts 
function showActiveAdverts() 
{ 

    $status = 1; 
    //Build final queries. 
    $query = mysql_query("SELECT * FROM table WHERE 
      status = '".mysql_real_escape_string($status)."' ORDER BY rand() LIMIT 6") or die(mysql_error()); 

    $count = mysql_num_rows($query); 
    $row = mysql_fetch_assoc($query); 

# My question here, check if the $count >= 1 && $count != 6, then do getDefaultBannner() and repeat it until it runs for 6 times. 
    if($count >= 1){ 
     do{ 
      $list[] = $row['id']; 
     }while($row = mysql_fetch_assoc($query)); 
     return $list; 
    } 
    else{ return FALSE; } 
    } 

下面的代码为getDefaultBannner()

function getDefaultBannner() 
{ 
    $status = 6; 
    $query = mysql_query("SELECT id FROM table WHERE status = '".mysql_real_escape_string($status)."' ") 
      or die(mysql_error()); 

    $count = mysql_num_rows($query); 
    $row = mysql_fetch_assoc($query); 


    if($count >= 1){ 
     do{ 
      $list[] = $row['id']; 
     }while($row = mysql_fetch_assoc($query)); 
     return $list; 
    } 
    else{ return FALSE; } 
} 
提前

谢谢!

+0

你可能想尝试做的SQL水平,而不是一个'UNION'的方式,让你_always_找回6行,不管是什么。这将简化您的逻辑并保持更强大的功能。 – arkascha

+0

这是我正在努力实现的目标。我有6个广告位,如果没有找到有效广告,则应该填充默认图片。如果我查询数据库,并且我获得的活动广告少于6个(根据他们的状态),其他空白插槽应该填充默认图像。 'UNION'会在SQL级别上解决这个问题吗? @arkascha –

+1

那么,使用'UNION ALL',你可以将两个'SELECT'查询的结果合并为一个。第一个查询将是随机的,第二个查询默认横幅6次。这意味着您总是会返回至少6行,您现在可以将总数限制为6个。这将允许只运行一条语句,但该语句稍微复杂一些。棘手的一点是“6次”。这需要一个存储过程,或者简单实用,只需在表格中存储默认横幅6次。 – arkascha

回答

0

您可以重写代码,因为这

//List All active adverts 

$query = mysql_query("SELECT * FROM table WHERE 
      status = '".mysql_real_escape_string($status)."' ORDER BY rand() LIMIT 6") or die(mysql_error()); 

$count = mysql_num_rows($query); 

if($count >= 1 && $count != 6) 
    $list = getDefaultBannner(); 
else 
    $list = showActiveAdverts($query); 

function showActiveAdverts($query) 
{ 

    $status = 1; 
    //Build final queries. 

    $row = mysql_fetch_assoc($query); 

    if($count >= 1){ 
     do{ 
      $list[] = $row['id']; 
     }while($row = mysql_fetch_assoc($query)); 
     return $list; 
    } 
    else{ return FALSE; } 
    } 
+0

谢谢@Gunasegar,但我怎么称呼第一个查询? –