我正在使用YITH Woocommerce订阅的免费版本,以允许我的Wordpress网站用户能够以订阅的方式购买产品。当用户购买订阅时,会发生一些事情。为订单创建新帖子,为订单创建新订阅,订单和订阅都添加了各种帖子元素。我担心检查用户是否对我的某个产品进行了有效订阅,产品ID为“432”。
以下是数据库中记录的示例:
post_meta表
post_id: 468
meta_key: _product_id
meta_value: 432
post_id: 468
meta_key: _user_id
meta_value: 1
post_id: 468
meta_key: _status
meta_value: active
上面的示例显示ID为“1”的用户具有“有效”订阅,订阅“468”用于产品“432”。
我不确定如何形成一个查询,检查当前登录的用户是否有对产品432的有效订阅,因为数据没有存储在一行中。
编辑:根据James的回答,我能够更新我的查询并获得以下结果。但是,我无法运行成功的where / having子句。当我添加where或having子句时,查询返回空。
NEW QUERY:
SELECT post_id,
GROUP_CONCAT(IF(meta_key='_product_id', meta_value,'') SEPARATOR '') product_id,
GROUP_CONCAT(IF(meta_key='_status', meta_value,'') SEPARATOR '') status,
GROUP_CONCAT(IF(meta_key='_user_id', meta_value,'') SEPARATOR '') user
FROM wprq_postmeta
GROUP BY post_id
ORDER BY post_id DESC
结果:
Array
(
[0] => Array
(
[post_id] => 471
[product_id] =>
[status] =>
[user] =>
)
[1] => Array
(
[post_id] => 468
[product_id] => 432
[status] => active
[user] => 1
)
[2] => Array
(
[post_id] => 465
[product_id] => 432
[status] => active
[user] => 2
)
[3] => Array
(
[post_id] => 499
[product_id] =>
[status] =>
[user] =>
)
)
在上面的结果集中,我只希望结果为“ status ='有效'且&product_id = 432 AND user = 1 ”
编辑2:我认为我的条款的位置很重要。我最初在group by子句之前有了我的having子句,而且我得到了一个空的结果集。当我按照group by子句移动我的having子句时,它起作用了。
答案 0 :(得分:1)
这是一种方法,如果您有任何本地问题,请告诉我,
CREATE TABLE post_meta(post_id INT, meta_key CHAR(32), meta_value CHAR(32));
INSERT INTO post_meta VALUES
(468, '_product_id', 432),
(468, '_user_id', 1),
(468, '_status', 'active'),
(469, '_product_id', 432),
(469, '_user_id', 1),
(469, '_status', 'active');
SELECT post_id, GROUP_CONCAT(IF(meta_key='_product_id', meta_value,'') SEPARATOR '') _product_id, GROUP_CONCAT(IF(meta_key='_status', meta_value,'') SEPARATOR '') _status FROM post_meta WHERE post_id = 468 AND meta_key IN ('_product_id', '_status') GROUP BY post_id;
此致
詹姆斯
答案 1 :(得分:0)
在James的帮助下,我能够得到以下查询。我没有意识到我的HAVING子句的位置必须在我的GROUP BY子句之后。
SELECT post_id,
GROUP_CONCAT(IF(meta_key='_product_id', meta_value,'') SEPARATOR '') product_id,
GROUP_CONCAT(IF(meta_key='_status', meta_value,'') SEPARATOR '') status,
GROUP_CONCAT(IF(meta_key='_user_id', meta_value,'') SEPARATOR '') user
FROM wprq_postmeta
GROUP BY post_id
HAVING product_id = 432 AND status = 'active' AND user = $user
ORDER BY post_id DESC