2011-11-03 138 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

相关问题