gpt4 book ai didi

php - 搜索匹配 'meta_value' 和 'post_id' 时获取 'meta_key' , 'meta_value' 组合

转载 作者:行者123 更新时间:2023-11-28 23:10:40 25 4
gpt4 key购买 nike

postmeta table example

最终结果是匹配一组 'post_id',按参加者人数排序。我知道这是一个 WP 后端,但我必须用 SQL 来做,没有 'get_posts' 或任何与 WordPress 相关的东西。我想做的是令人困惑,所以我会尽量弄清楚。

我必须开始的事情:

  • $check_post_ids - 我需要检查的原始 post_id 数组
  • $start_date - 'meta_value' 每个事件的'_StartDate' 需要匹配。

我需要做什么:

我需要检查这三个 post_id 以查看它们是否具有匹配的开始日期。如果他们这样做了,我需要获取一组 post_id,这些 post_id 是按照与会者人数从多到少排序的。


目前我正计划使用多个 SELECT 和 foreach() 语句来执行此操作,但我觉得必须有一种更简单的方法来执行此操作(即一个 SELECT & 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;
}
}
}

最佳答案

对于查询的第一部分,我认为您可以使用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)选择所有元值(我想是与会者)。

希望对你有所帮助。

关于php - 搜索匹配 'meta_value' 和 'post_id' 时获取 'meta_key' , 'meta_value' 组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46101263/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com