基本上我正在为我的论坛用户建立一个自动奖励系统。它要做的是检查它们是否符合IE Posts, Karma等奖项的标准....如果满足这个条件,允许成员自我发行。
我面临的一个问题是我想查询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>';
显然,在这个奖项下面还有更多的奖项…
你可以这样做:
Select * FROM awards_member WHERE id_award in (1,2,3,4,5) AND id_member = 5
只需添加您需要检查的额外奖励id
根据查询的结果,您可以遍历每个结果并检查尚未给出的奖励id,并在需要时显示按钮。
获取该用户获得的所有奖项,并将其添加到数组中。
// 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
}
你可以试试
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
在这个查询中,你有所有的awards-id,如果一个奖项给了一个成员,你有member-id,否则你得到一个0。