2015-10-28 93 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,但我怎麼稱呼第一個查詢? –