2011-11-03 171 views
0

基本上我正在爲我的論壇的用戶構建一個汽車獎勵系統。 它的作用是檢查它們是否符合該獎項IE帖子,因果報應等.... 的準則允許成員自主的問題,如果他們滿足此條件..如何檢查一個查詢是否存在多個值

的一個問題,我面對的是我喜歡查詢MySQL數據庫一次,並對每個獎項進行多次檢查,看看他們是否已經擁有它。 如果不允許他們通過單擊按鈕自行頒發獎勵。

這裏是我迄今爲止

//Query Member Awards DB to check if we already have this Award 
    $query2 = $smcFunc['db_query']('', ' 
     SELECT id_award, id_member 
     FROM {db_prefix}awards_members 
     WHERE id_member = {int:id_prof}', 
      array(
       'id_prof' => $user_info['id'], 
      ) 
    ); 
    $info2 = $smcFunc['db_fetch_assoc']($query2); 

    echo $info2['id_award']; 

    if ($info2['id_award'] == '27') 
     echo 'exists'; 

我的表看起來像這樣

uniq_id id_award id_member date_received favorite 
    44  29  1  2011-11-02 1 
    31  21  1  2011-11-02 0 
    41  32  1  2011-11-02 0 
    43  27  1  2011-11-02 0 
    34  18  1  2011-11-02 0 
    35  38  1  2011-11-02 1 
    39  31  1  2011-11-02 0 
    40  30  1  2011-11-02 1 

現在基本上下面我將有一堆都具有不同的ID的 獎我想是─能夠說如果存在不顯示一個按鈕.. 現在這將是很好,如果只有一個獎項檢查,但我需要檢查幾個獎項。

我不想使用where子句進行多個查詢,看看這個成員是否已經有了這個獎項。

是否有這樣做,所以我只需要一個查詢,並可以檢查多個獎項的一個簡單的方法..

if ($info2['id_award'] == '1') 
      echo 'exists'; 

if ($info2['id_award'] == '2') 
      echo 'exists'; 

等等

我在待辦事項的最佳方式很疑惑。 任何幫助將是驚人的。

編輯:

呀基本上它會看起來像這樣..我將使用AJAX提交數據..

if ($info2['id_award'] != '27') && ($info['karma_good'] >= '100') { 
     echo ' 
     <form id="karma_god" method="post"> 
      <input type="hidden" id="recipient_to" name="recipient_to" value="' . $info['id_member'] . '" size="32" /> 
      <input type="hidden" id="award" name="award" value="28" size="32" /> 
      <input type="hidden" id="year" name="year" value="' . date('Y') . '" size="32" /> 
      <input type="hidden" id="month" name="month" value="' . date('n') . '" size="32" /> 
      <input type="hidden" id="day" name="day" value="' . date('d') . '" size="32" /> 
      <span>You have above 100 Karma! A New Award Awaits. </span><button class="button"> <img src="http://www.uniquez-home.com/awards/28.gif" alt="" style="vertical-align:bottom;"> Karma God </button> 
     </form>'; 

而且顯然是多了一些獎勵2這一項下..

回答

2

獲取授予該用戶的整個授予範圍,並將它們添加到數組中。

// generate the array 
// obviously you can use your function here to fetch results and iterate over it 
// it just matters that you generate an array of awarded awards 
$awarded = array(); 
while($row = mysql_fetch_assoc($result)){ 
    $awarded[] = $row['id_award']; 
} 

然後,可以很容易地檢查你的應用程序邏輯:

// check for award id 2 
if(in_array(2, $awarded)){ 
    // echo award 2 is received 
} 

// check for award id 3 
if(in_array(3, $awarded)){ 
    // echo award 3 is received 
} 
+0

這似乎是最好的解決方案也是最快的。 你可以給我一個如何將它們全部放入數組的例子嗎? –

+1

@ oOo - STAR - oOo我已經給了你一個。如果你有一些用於運行mysql查詢的自定義函數/包裝器,你應該共享它,以便我可以根據這個包裝器調整代碼。 – Shef

+0

這將工作..非常感謝你..我將要測試這種方法和in子句方法..我今天學到了新東西XD –

1

你可以嘗試

SELECT aw.id, COALESCE(am.id_member, 0) 
FROM awards aw LEFT JOIN award_members am 
ON aw.id = am.id_award 
WHERE am.id_member = your_member 

與此查詢你把所有的獎項-id和,如果單個獎勵已經給了你有會員ID的會員,否則你得到一個零。

+0

只有一張表來查詢我爲什麼需要離開連接? 我不明白這個答案對不起。 –

+0

@ oOo - STAR - oOo:所以你沒有一個會員可以贏得所有獎項的桌子? – Marco

+0

沒有抱歉..我只需要一張桌子。 因爲成員ID已經確定,所以我會在ID_MEMBER和ID_AWARD 上做一個where子句,我不需要加入任何表格。感謝您的輸入。 –

5

你可以這樣做:

Select * FROM awards_member WHERE id_award in (1,2,3,4,5) AND id_member = 5 

只想補充一點,你需要檢查

額外獎勵ID

根據查詢結果,您可以遍歷每個結果並檢查哪個獎勵ID不是然後給予並顯示按鈕,如果需要的話。

+1

這會證明應用程序的邏輯是什麼,即它是否應該顯示按鈕? – Shef

+0

他可以循環訪問結果並顯示不在列表中的哪個按鈕(關於授予ID) – denil

+1

我不認爲通過在那裏添加「IN」子句以及所有那些獎項。 – Shef

相關問題