無料版の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」を持つユーザーは、サブスクリプションである「アクティブ」サブスクリプションを持っていることを示しています製品 "432"の "468"。
データが単一の行に格納されていないため、現在ログインしているユーザーが製品432へのアクティブなサブスクリプションを持っていることを確認するクエリを作成する方法がわかりません。
EDIT:ジェームズの答えでは、私は私のクエリを更新し、以下の結果を得ることができました。ただし、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] =>
)
)
、私は結果だけを配置したい場所 "ステータス= 'アクティブ' AND product_idの= 432 ANDユーザ= 1 "
EDIT 2:私の持っている句の位置が重要だと思います。私はもともとgroup by節の前にhaving句を持っていましたが、空の結果セットが得られました。グループ句の後に私のhaving句を移動したとき、それは働いていました。ここで
これは私のために空の結果セットを返しました。しかし、私はこれを少し微調整して作業結果を得ることができました。私の問題は今どこで働いているのかわからないということです。編集した投稿をご覧ください。 – bowlerae
これを今解決しましたか、またはあなたの回答クエリを試してみませんか?もしそうなら。 –
(fat fingers ...)は$ user擬似コードですか?なぜ$プレフィックスではないのでしょうか?確かにそれは@正しいはずですか? –