2017-09-07 71 views
1

postmeta table example走走meta_value'匹配「POST_ID」和「meta_key」,「meta_value」二合一

最終的結果是匹配的「POST_ID」陣列,由出席者的數量來分類的搜索時。我知道這是一個WP後端,但我必須在SQL中完成,沒有'get_posts'或任何與WordPress相關的東西。我想要做的是混亂,所以我會努力澄清。

我有什麼開始:

  • $ check_post_ids - post_ids我需要檢查的原始數組
  • $ START_DATE - 在'meta_value'每個事件的「 _StartDate'需要匹配。

我需要做什麼:

我需要檢查這三個post_ids,看看他們是否有匹配的開始日期。如果他們這樣做,我需要獲得從最高到最低數量的與會者排序的post_ids數組。


目前我打算多的SELECT和foreach()語句這樣做,但我覺得必須有這樣做(即一個選擇&的foreach())一個簡單的方法。這是我目前正在做的事情。我還沒有完成它,因爲我覺得必須有一個更簡單的方法來做到這一點。更新的SQL和任何幫助非常感謝!

$check_post_ids = array('484', '627', '982', '2435');  
    $start_date = '1963-10-20 19:30:00';    

    // iterate through array of post_ids and check if they have the same _StartDate 
    foreach($check_post_ids as $id){ 
     $start_date_check = "SELECT * FROM `wp_postmeta` WHERE `post_id` =" . $id . " AND `meta_key` LIKE '_StartDate' AND `meta_value` = '" . $start_date . "'"; 
     $start_date_check_result = mysqli_query($conn, $start_date_check); 

     // assign all post_ids with a matching _StartTime to a new array 
     if (mysqli_num_rows($start_date_check_result) > 0) { 
      while($row = mysqli_fetch_assoc($start_date_check_result)) { 
       $matching_post_ids[] = $row['post_id']; 

       // iterate through matching_post_ids array, get the _NumAttendees for each, and assign their id and _NumAttendees to an assoc array to be sorted 
       foreach($matching_post_ids as $id){ 
        $attendees_check = "SELECT meta_value FROM wp_postmeta WHERE post_id = " . $id . " AND meta_key = '_ecp_custom_2'"; 
        $attendees_check_result = mysqli_query($conn, $attendees_check); 
        if($upvotes_check > 0){ 
         while($row = mysqli_fetch_assoc($attendees_check_result)){ 
          $sort_by_attendees['id'] = $id; 
          $sort_by_attendees['attendees'] = $row['meta_value']; 
          $sort_by_attendees_array[] = $sort_by_attendees; 
         } 
        } 
       } 
+0

再次弄砸它,我可以看到我的代碼是各種各樣的重擊,但希望它可以幫助你獲得基本的想法。 – AndrewTelkamp

回答

0

對於查詢的第一部分,我認爲您可以通過使用SQL IN關鍵字來簡化您的代碼。基本上它會將您的第一個數組的角色替換爲您的所有帖子ID。然後,你可以寫這樣的SQL查詢:

SELECT meta_value 
FROM wp_postmeta 
WHERE meta_key = '_ecp_custom_2' 
AND post_id IN (SELECT post_id 
FROM wp_postmeta 
WHERE post_id IN ('484', '627', '982', '2435') 
AND meta_key LIKE '_StartDate' 
AND meta_value = '" . $start_date . "'") 
ORDER BY meta_value DESC 

有2個問題。括號中的第一個,選擇表wp_postmeta中的所有帖子ID,其中post_ids在您的列表中包含ID,並且它們與您的開始日期匹配。然後,主查詢根據您的第一個子查詢(所有帖子ID與您的開始日期)選擇所有meta_values(我想參加者)。

希望它能幫助你。

+0

你大爆炸!謝謝!爲了防止其他人試圖複製和粘貼,你必須從開始日期之後的最後一個雙引號(「)移到DESC之後。我還需要post_ids是動態的,因爲它們來自一個數組,所以我在數組中使用了implode(),所以我可以使用變量。再次感謝您的幫助,我真的很感謝它! – AndrewTelkamp

+0

感謝您的提示,歡迎您! – Arrabidas92

相關問題