2015-05-17 7 views
-3

Я работаю в WordPress и хочу вставить строку только в том случае, если она не существует, и если она существует от текущего пользователя, я хочу обновить ее новым значением. Ниже код не выводит никаких результатов или null на вызов ajax, и консоль также не показывает никаких ошибок. Если я запустил alonge запроса обновления вставки, они работают, но когда они используются вместе, они не показывают никакого результата. Я использовал ajax, чтобы просто передать результат в div. Поэтому я просто вставляю php-код здесь.обновление, если существует или вставить, если не существует в wordpress

PHP код

add_action('wp_ajax_star', 'star'); 
add_action('wp_ajax_nopriv_star', 'star'); 


    function star() 
    { 
     //variables 

     $user_info = wp_get_current_user(); 
     $user=$user_info->user_login; 
     $passedvalue = $_POST['clickval']; 
     $competition = $_POST['compete']; 
     $aid = $_POST['foo']; 
     global $wpdb;  
     //$sqll = "SELECT zvotes.zvotes FROM zvotes WHERE zvotes.votedby = '$user' && zvotes.zcompetition = '$competition'"; 
     $previous = $wpdb->get_var("SELECT zvotes.zvotes FROM zvotes WHERE zvotes.votedby = '$user' && zvotes.zcompetition = '$competition'"); 

     if(count($previous)>0){ 

      $wpdb->update('zvotes', array('zvotes'=>$passedvalue), array('votedby'=>$user, 'competition'=>$competition)); 

      echo json_encode("there is a previous entry");die();}  

     $wpdb->insert(
      'zvotes', 
      array(
        'zvotes' => $passedvalue, 
        'zcompetition' => $competition, 
        'aid' => $aid, 
        'votedby' => $user 
       )); 

     echo json_encode("insert works");die(); 

    } 
+0

он назван UPSERT. Google, чтобы помочь – splash58

+0

@ splash58 ... вы думаете, что он может достичь того, что мне нравится вставить, только если нет строки и если найдено только обновление. Можете ли вы поделиться основным синтаксисом, потому что я застрял и пытался в течение двух часов – Zlogic

+0

http://dev.mysql.com/doc/refman/5.6/en/insert-on-duplicate.html – splash58

ответ

0

В MySQL синтаксис insert . . . on duplicate key update. Вам нужен уникальный ключ в столбцах, используемых для определения переменных. Я предполагаю, что это:

create unique index idx_zvotes_votedby_competition on zvotes(voted_by, zcompetition); 

Тогда код будет выглядеть примерно так:

insert into zvotes (voted_by, zcompetition, zvotes) 
    select $voted_by, @zcompetition, $zvotes 
on duplicate key update zvotes = zvotes + value(zvotes); 

Вы не ясно, о структуре данных, так что это приближение того, что вы, вероятно, нужно.

+0

Нет, это не решает мою проблему ... может кто-нибудь предложить, что я могу сделать в этом случае .. спасибо .. Гуру Wordpress здесь! – Zlogic