Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/242.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何通过一个查询检查是否存在多个值_Php_Mysql - Fatal编程技术网

Php 如何通过一个查询检查是否存在多个值

Php 如何通过一个查询检查是否存在多个值,php,mysql,Php,Mysql,基本上,我正在为我的论坛用户建立一个自动奖励系统。 它将做的是检查他们是否符合奖励的标准,即帖子、因果报应等。。。。 如果会员符合此标准,则允许会员自行发行 我面临的一个问题是,我想查询一次MySQL数据库,并对每个奖项进行多次检查,看看他们是否已经获得了该奖项。。 如果不允许他们通过单击按钮自行颁发奖励 这是我到目前为止所拥有的 //Query Member Awards DB to check if we already have this Award $query2 = $smcF

基本上,我正在为我的论坛用户建立一个自动奖励系统。 它将做的是检查他们是否符合奖励的标准,即帖子、因果报应等。。。。 如果会员符合此标准,则允许会员自行发行

我面临的一个问题是,我想查询一次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 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,否则您将获得零。

您可以尝试

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,否则您将获得零。

获取授予该用户的全部奖励,并将其添加到数组中

// 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
}

获取授予该用户的全部奖励,并将其添加到阵列中

// 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 * FROM awards_member WHERE id_award in (1,2,3,4,5) AND id_member = 5
只需添加您需要检查的其他奖励id

根据查询结果,您可以循环查看每个结果,检查尚未给出的奖励id,并根据需要显示按钮。

您可以执行以下操作:

Select * FROM awards_member WHERE id_award in (1,2,3,4,5) AND id_member = 5
只需添加您需要检查的其他奖励id



根据查询结果,您可以循环查看每个结果,检查尚未给出的奖励id,并根据需要显示按钮。

这将向应用程序逻辑证明什么,这就是它是否应该显示一个按钮?他可以循环到结果中,显示列表中没有的关于奖励的按钮。我不认为在所有这些奖励中添加in子句会有好处。@oOo STAR oOo表示,如果用户已经收到奖励,他需要一个查询来检查每个奖励。IN条款将是解决问题的最佳方式do@shef好的,丹尼说这是最好的方法。完成查询后,我将如何检查是否存在?我已经编辑了我的原始帖子,以显示我正在做什么。这将向应用程序逻辑证明什么,这就是它是否应该显示一个按钮?他可以循环到结果中,显示列表中没有的关于奖励的按钮。我不认为在所有这些奖励中添加in子句会有好处。@oOo STAR oOo表示,如果用户已经收到奖励,他需要一个查询来检查每个奖励。IN条款将是解决问题的最佳方式do@shef好的,丹尼说这是最好的方法。完成查询后,我将如何检查是否存在?我编辑了我的原始帖子,以显示我正在做的事情。这似乎是最好的解决方案,也是最快的解决方案。你能给我举个例子说明你是如何把它们都放在一个数组里的吗?@oOo STAR oOo我已经给过你一个了。如果您有一些用于运行mysql查询的自定义函数/包装器,您应该共享这些函数/包装器,以便我可以根据该包装器调整代码。。非常感谢你。。我将测试这个方法和in子句方法。。今天我学到了一些新的东西,经过测试,效果很好,谢谢你的回答。谢谢!这似乎是最好的解决方案,也是最快的。你能给我举个例子说明你是如何把它们都放在一个数组里的吗?@oOo STAR oOo我已经给过你一个了。如果您有一些用于运行mysql查询的自定义函数/包装器,您应该共享这些函数/包装器,以便我可以根据该包装器调整代码。。非常感谢你。。我将测试这个方法和in子句方法。。今天我学到了一些新的东西,经过测试,效果很好,谢谢你的回答。谢谢!只有一个表可以查询为什么我需要左连接?对不起,我不明白这个答案。@oOo-STAR-oOo:所以你没有一张表,上面有一个成员可以赢得的所有奖项?不,对不起。。我只需要一张桌子。因为成员ID已经确定,所以我将在ID_成员和ID_奖励上执行where子句,我不需要加入任何表。。谢谢你的意见。@oOo-STAR-oOo:awar
ds是固定的,您需要有一个静态列表来检查所有的ds。。。这不是一个好主意…只有一个表可以查询为什么我需要左连接?对不起,我不明白这个答案。@oOo-STAR-oOo:所以你没有一张表,上面有一个成员可以赢得的所有奖项?不,对不起。。我只需要一张桌子。因为成员ID已经确定,所以我将在ID_成员和ID_奖励上执行where子句,我不需要加入任何表。。谢谢您的输入。@oOo STAR oOo:所以您的奖励是固定的,您需要有一个静态列表来检查所有的奖励。。。这不是个好主意。。。