通过比较一些数据使用wpdb获取数据

时间:2017-01-03 07:41:24

标签: javascript php jquery ajax wordpress

我希望通过将用户ID和日期与帖子进行比较来获取数据(时间)。 以这种形式存储的数据 元键
日期 - 03-01-2017
时间 - 5AM-6AM
userid - 1

现在当我点击一个按钮时,我会得到日期和用户ID。

$(".date").click(function(){

    clicked = this; 
    var dates= $(clicked).closest("ul").find(".getdate").val();
    var item= jQuery(this).closest("li.lia");
    var date = jQuery(item).find("input.getdate").val();
    alert(date);

    $.ajax({
         type: 'POST',   // Adding Post method
         url: MyAjax.ajaxurl, // Including ajax file
         data: {"action": "date_time", "date":date, 
         "userid":'<?php echo $uid;?>'}, // Sending data dname to  post_word_countfunction.
         success: function(data){ // Show returned data using thefunction.
         alert(data);
        }
      });
});

然后我通过ajax将这些数据发送到函数date_time。

function date_time(){
    $date = $_POST['date'];
    $userid = $_POST['userid'];
    global $wpdb;
    $sql = "SELECT * FROM $wpdb->postmeta WHERE meta_key = 'date' AND     meta_value='$date' AND meta_key = 'userid' AND meta_value='$userid'";
    $results = $wpdb->get_results($sql) or die(mysql_error());
    print_r($results);
}

这里我匹配用户ID和日期并尝试获取时间,但它在ajax成功函数的警报中显示0。

3 个答案:

答案 0 :(得分:0)

尝试元查询而不是自定义查询:

WP Meta Query

基于它,

$args = array(
    'meta_query' => array(
        array(
            'key' => 'date',
            'value' => $date,
            'compare' => '='
        ),
// this array results in no return for both arrays
        array(
            'key' => 'userid',
            'value' => $userid,
            'compare' => '='
        )
    )
);
$the_query  = new WP_Query( $args );

答案 1 :(得分:0)

如果我理解了这个问题,你需要在postmeta表上进行自我加入:你需要找到并加入几行来获取你需要的数据。

在此之前,请阅读SQL injection in WordPress - 您的代码容易受到恶意POST ed值的攻击。<​​/ p>

尝试类似的(未经测试,但它应该给你的想法):

$sql = $wpdb->prepare("
    SELECT metatime.meta_value
      FROM $wpdb->postmeta metadate
           JOIN $wpdb->postmeta metauser on metadate.post_id = metauser.post_id
           JOIN $wpdb->postmeta metatime on metadate.post_id = metatime.post_id
     WHERE metadate.meta_key = 'date'
       AND metauser.meta_key = 'userid'
       AND metatime.meta_key = 'time'
       AND metadate.meta_value = %s
       AND metauser.meta_value = %d",
    $date,
    $userid);

答案 2 :(得分:0)

在WordPress元数据表中几乎没有什么不同。这里所有元数据都是单独的行。因此,您无法像查询一样查询同一查询中的多个元数据 但你可以这样做。试试这个SQL,我认为它会对你有所帮助。

SELECT m1.meta_key as date,
       m1.meta_value as dateval,
       m2.meta_key as userid,
       m2.meta_value as useridval 
  FROM `wp_postmeta` as m1 
       LEFT JOIN wp_postmeta as m2 ON m1.post_id = m2.post_id 
 WHERE (m1.meta_key ='date' AND m1.meta_value='$date')
   and (m2.meta_key = 'userid' AND m2.meta_value='$userid')