ここに私の問題があります。SQL クエリを使用して、投稿のメタデータに基づいて結果を返そうとしています。このメタデータは、ユーザー インターフェイス内で投稿を作成する際にユーザーによって入力されます。フィルターに問題があります。一度に 1 つの変数に対してのみうまく機能しますが、それ以上は機能しません (例: トピックが選択されている場合は正常に機能しますが、トピックとメディアが選択されている場合は結果が返されません)。コード:
$db_build_post_filter_WHERE = array();
// Default to avoid errors on WHERE GROUP BY
$db_build_post_filter_WHERE [] = 'cmsp_post.post_id > 0';
//$db_build_post_filter_WHERE [] = 'cmsp_post.post_id = cmsp_post_meta.post_id';
if ( isset( $gnocore_cmsp_build_topic_slug_id_array[$filter_topic] ) ) {
$db_build_post_filter_WHERE [] = 'post_meta_key = "topic_id" AND post_meta_value = ' . $gnocore_cmsp_build_topic_slug_id_array[$filter_topic];
}
if ( isset( $gnocore_cmsp_build_media_slug_id_array[$filter_media] ) ) {
$db_build_post_filter_WHERE [] = 'post_meta_key = "media_id" AND post_meta_value = ' . $gnocore_cmsp_build_media_slug_id_array[$filter_media];
}
if ( isset( $gnocore_cmsp_build_author_slug_id_array[$filter_author] ) ) {
$db_build_post_filter_WHERE [] = 'post_meta_key = "author_id" AND post_meta_value = ' . $gnocore_cmsp_build_author_slug_id_array[$filter_author];
}
// PROJECT FILTER ARRAY
$build_post_filter_array = array();
gnoshare_db_select ('cmsp_post LEFT JOIN cmsp_post_meta ON cmsp_post.post_id = cmsp_post_meta.post_id','cmsp_post.post_id',implode(' AND ',$db_build_post_filter_WHERE) . ' GROUP BY cmsp_post.post_id','cmsp_post.project_id, post_name, cmsp_post.post_id','db_build_post_filter_array_num','db_build_post_filter_array_results');
if ( $db_build_post_filter_array_num > 0 ) {
foreach ($db_build_post_filter_array_results as $db_build_post_filter_array_result) {
$build_post_filter_array [$db_build_post_filter_array_result->post_id] = '';
}
}
私の問題は「PROJECT FILTER ARRAY」の部分にあると思います。誰か助けていただければ幸いです。
乾杯
編集:「 AND 」を「 OR 」に変更すると、単にすべての投稿を表示する結果が生成されます。私の問題はこのコード行にあると言っても過言ではないと思いますが、結果を生成する方法はまだ見つかりません。探しています。
gnoshare_db_select ('cmsp_post LEFT JOIN cmsp_post_meta ON cmsp_post.post_id = cmsp_post_meta.post_id','cmsp_post.post_id',implode(' OR ',$db_build_post_filter_WHERE) . ' GROUP BY cmsp_post.post_id','cmsp_post.project_id, post_name, cmsp_post.post_id','db_build_post_filter_array_num','db_build_post_filter_array_results');
編集:ここに私のテーブルがあります(大まかに):
+----------+---------------+-----------------+
| post_id | post_meta_key | post_meta_value |
+----------+---------------+-----------------+
| 1 | topic_id | 1 |
+----------+---------------+-----------------+
| 1 | media_id | 1 |
+----------+---------------+-----------------+
| 1 | author_id | 2 |
+----------+---------------+-----------------+
| 2 | media_id | 2 |
+----------+---------------+-----------------+
| 2 | topic_id | 2 |
+----------+---------------+-----------------+
そして、ユーザーが投稿に対して行った選択に基づいてフィルター処理したい (例: ユーザーがトピック 1、メディア 1、著者 2 を投稿 1 に、メディア 2、トピック 2 を上記の表に示す投稿 2 に選択した)例は真です。フィルターで次のいずれかが選択されている場合、Web ページで投稿 1 を生成したい: トピック 1 でフィルターすると投稿 1 のみが表示され、トピック 1 とメディア 1 でフィルターすると投稿 1 のみが表示され、トピック 1 でフィルターするメディア 2 は、選択した基準に一致するものがないことを示すメッセージを表示します。これはもう少し明確ですか?