如何返回值在可用行中首次出现的行中的值?

时间:2017-02-01 作者:A. Tekay

我在WordPress中有一个数据库表,如下例所示:

ID | Allocation_number | Treatment | Used 
1 | 1 | A | 0
2 | 2 | B | 0
3 | 3 | B | 0
4 | 4 | A | 0
这些行最多可以延续X次。“Allocation\\u number”从1开始,增加+1。“已使用”列有“0”或“1”,0表示尚未使用,1=已使用。使用的这一列可能不是必需的-然而,我认为通过使用这一逻辑,我们可能会指出第一种可用的治疗方法(尚未使用)。处理选项为字符串(此处随机选择A或B)

当用户获取队列中的第一个可用处理时,已使用列的值将更新,0将替换为1。当第一个用户接受第一次治疗A时,表格应如下所示:

ID | Allocation_number | Treatment | Used
1 | 1 | A | 1
2 | 2 | B | 0
3 | 3 | B | 0
4 | 4 | A | 0
Q: 我如何实现这样一种场景,即触发按钮的下一位访客将获得分配给他/她的以下可用治疗(在本例中为B)。下一个将得到下一个可用的,即B。

换句话说,SQL查询必须在使用列值第一次出现值0的行中找到列处理的值-这是第一个尚未使用的处理?

有人能帮我找到正确的SQL查询或钩子吗?或者有没有任何机构为WordPress提供了类似的插件来实现这一点?

2 个回复
SO网友:nibnut

因此,您需要使用MySQL的“ORDER BY”功能:

SELECT Treatment FROM my_table WHERE Used=0 ORDER BY Allocation_number ASC LIMIT 1
因此,您可以查找使用=0的所有行,按Allocation\\u number升序排列(排序),然后选择匹配的第一行。(“限制1”)

我让你把这个插进$wpdb 作为练习……;)

希望这有帮助!

SO网友:A. Tekay

谢谢我做了家庭作业,并编写了第一个插件来完成这项任务。我添加了一个短代码来调用此函数。我可以使用你的建议从数据库中获取数据,而且效果很好。

这是我的最终代码:

        function return_treatment_type(){
        global $wpdb;
        $tableName = $wpdb->prefix . \'random\';  // Ensures  that your table name matches the prefix in config.wp
        $where = [\'random_ID\' => $_POST[hidden]];
        $user = new WP_User(get_current_user_id());
        $user->roles[0];
        $current_user = wp_get_current_user();
        $url = "http://some.domain";
        $myData = $wpdb->get_results("SELECT random_ID, treat_type, user_id, allocationused_date, random_owner, randomnumero_used, random_number, comment, created, updated FROM `$tableName` WHERE randomnumero_used=0 ORDER BY random_number ASC LIMIT 1");

        foreach ( $myData as $myNData )
        {
          echo "<form action=\'#\'  method=post>";
          echo "<input type=datetime       name=allocationused_date  value=" . $myNData->allocationused_date . "><br>";
          echo "<input type=bigint(60)     name=user_id    value=" . $current_user->user_login . "><br>";
          echo "<input type=varchar(191)   name=random_owner  value=" . $myNData->random_owner . "><br>";
          echo "<input type=longtext       name=treat_type   value=" . $myNData->treat_type . "><br>";
          echo "<input type=tinyint(2)     name=randomnumero_used  value=" . $myNData->randomnumero_used . "><br>";
          echo "<input type=int(10)        name=random_number  value=" . $myNData->random_number . "><br>";
          echo "<input type=longtext       name=comment  value=" . $myNData->comment . "><br>";
          echo "<input type=bigint(20)     name=random_ID   value=" . $myNData->random_ID . ">";
          echo "<input type=hidden         name=hidden   value=" . $myNData->random_ID . ">";
          echo "<input type=submit         name=update       value=update" . ">";
          echo "</form>";
        }

        if (isset($_POST[\'update\'])) {
          foreach ([\'allocationused_date\', \'user_id\', \'random_owner\', \'random_number\', \'treat_type\', \'randomnumero_used\', \'comment\', \'created\', \'updated\', \'random_ID\',] as $field) {
          $data[$field] = $_POST[$field];
          }
    if( $wpdb->update($tableName, $data, $where) === FALSE)
        echo "Failed";
    else
        wp_redirect( $url );
        exit;
        }       
        }       
add_shortcode(\'random\', \'return_treatment_type\');

相关推荐

如何读取WordPress$Query关联数组(散列)键的值

WordPress编程新手(来自更为传统的环境),并试图了解其一些“独特”特性。我们的网站上有一个目录页,此代码驻留在functions.php, 如果条件为true,则调整结果。if( $query->is_post_type_archive( \'directory\' ) ){ ...//do stuff } 我想知道如何获取is_post_type_archive 这就是“目录”当我对值使用测试时。。。var_dumb($query->is_post