gpt4 book ai didi

php - mySQL:根据键/值表中的几个键进行选择

转载 作者:行者123 更新时间:2023-11-29 00:04:13 24 4
gpt4 key购买 nike

我正在使用 Wordpress 并尝试从我自己的一个表中选择与 native wp_postmeta 表中的值相对应的值。

我的表称为“wellwishertable”,我想从 wellwisher 表中找到所有 ID(以便我可以计算它们)...

1) wellwishertable 'associatedID' 字段在 wp_postmeta post_id 中

2) wellwishertable 'associatedAuthorID' 与 $userID 变量相同

3) 可喜的“许可”正在等待

4) wp_postmeta meta_key 'status' 不等于 meta_value 'open'

5) wp_postmeta meta_key 'freeze' 不等于 meta_value 'frozen'

我已经走到这一步了......

    "SELECT DISTINCT wellwisher.ID FROM wellwishertable wellwisher 
INNER JOIN wp_postmeta ON (wellwisher.associatedID = wp_postmeta.post_id)
INNER JOIN wp_postmeta AS mt1 ON (wp_postmeta.post_id = mt1.post_id)
INNER JOIN wp_postmeta AS mt2 ON (wp_postmeta.post_id = mt2.post_id)

WHERE wellwisher.associatedAuthorID=".$userID."
AND wellwisher.permission ='pending'
AND ( (mt1.meta_key = 'status' AND mt1.meta_value != 'open') AND
(mt2.meta_key = 'freeze' AND mt2.meta_value != 'frozen') );

这似乎“接近”工作,除了它不计算 wp_postmeta 表中没有“卡住”meta_key 的记录。我希望它计算任何未“卡住”的记录,无论它是否存在(只要“状态”不是“打开”)。

有人能指出我正确的方向吗?

最佳答案

mt2 上使用 LEFT JOIN 而不是 INNER JOIN,因为 INNER JOIN 只会返回具有以下结果的结果那里有一个条目。

为了避免要求 mt2.meta_key 总是必须等于 freeze,请将该条件移至连接中的 ON 子句.

您还可以考虑直接在查询中使用 COUNT 而不是稍后再弄清楚:

"SELECT COUNT(DISTINCT wellwisher.ID) FROM wellwishertable wellwisher 
INNER JOIN wp_postmeta ON (wellwisher.associatedID = wp_postmeta.post_id)
INNER JOIN wp_postmeta AS mt1 ON (wp_postmeta.post_id = mt1.post_id)
LEFT JOIN wp_postmeta AS mt2 ON (wp_postmeta.post_id = mt2.post_id)
AND mt2.meta_key = 'freeze'

WHERE wellwisher.associatedAuthorID=".$userID."
AND wellwisher.permission ='pending'
AND ( (mt1.meta_key = 'status' AND mt1.meta_value != 'open') AND
(mt2.meta_value != 'frozen') );

重要提示:将您的 $userID 直接转储到您的查询字符串中可能是一个很大的安全问题。请考虑使用 parameterized queries .

关于php - mySQL:根据键/值表中的几个键进行选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28286942/

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