MySQLクエリの出力に基づいてデータの配列を作成しようとしています。MySQLは、変数に関連付けられたすべての値を提供する場合はそれを選択するか、提供されていない場合は空を含めてすべてを選択します。
私は、ユーザがドロップダウンボックスから都市を指定できるようにしたいと思います。この場合、関連する都市のみが返されるエントリが必要です。ユーザーが都市を選択していない場合
は批判的に(すなわち、空白のままに)私は彼らがむしろデータのなしよりすべてのデータを見てみたいです。
マイコード
// Parameters for order
$ordercity = (! empty($_GET['city'])) ? $_GET['city'] : '%'; // Set a wildcard if not provided
$exclstatus = 'wc-refunded'; // Set any excluded statuses
// Get the order details
$orderdata = $wpdb->get_results("
SELECT
posts.post_status,
posts.id as post_id,
meta1.meta_value AS city,
meta2.meta_value AS company,
meta3.meta_value AS email
FROM
wp2_posts posts,
wp2_postmeta meta1,
wp2_postmeta meta2,
wp2_postmeta meta3
WHERE posts.ID = meta1.post_id
AND posts.post_status NOT LIKE '$exclstatus'
AND meta1.meta_key LIKE '_billing_city'
AND meta1.meta_value LIKE '$ordercity'
AND meta1.post_id = posts.id
AND meta2.meta_key LIKE '_billing_company'
AND meta2.post_id = posts.id
AND meta3.meta_key LIKE '_billing_email'
AND meta3.post_id = posts.id
", ARRAY_A);
私の現在のアプローチの限界は
私の現在のアプローチは、市が設定されていない場合は「%」ワイルドカードでの$ ordercityを移入することです。
これは、_billing_cityの値を持つ(つまり空ではない)レコードのみが選択されるため、これは限られています。
私の研究
条件文を使用して提案し、このStack Overflow postは面白かったが、それは不必要と思われるとあれば、非常に長い息切れすることができ、2つの非常に類似したクエリ(AND meta1.meta_value LIKE '$ordercity'
と1なしのものを)持っている私を必要とします私は複数の変数を持っています。
は、私はまた、SQL WildcardsにW3学校のアドバイスをチェックアウトしてきましたが、私はそれが何か何も「
ただし、ユーザーが特定の値を選択してもNULL値は選択されませんシティ? – Manav
@Manav、それはOPが望んでいると信じています – Rahul
@rahul。都市が選ばれた場合は空の値を表示したくなかったが、都市が選択されていない場合はそれらを表示したかった。私はあなたの提案に基づいて解決策を含めるように私の質問を更新しました。ありがとう。 – LauraTheExplorer