私はすでに同様の解決済みの質問をすべて見てきましたが、まだ解決策を見つけていません。
だから、このワードプレスにはハウスとサーキット(カスタム投稿タイプ)があります。家には複数の回路を接続できます (リピータ カスタム フィールド)。クエリは動的に作成され、IDS のリストから任意の回線に関連付けられたすべての家を取得します。
これは機能しますが、一致する回路が複数ある場合は家を繰り返します。例えば:
SELECT DISTINCT *
FROM reoask5_posts p
INNER JOIN reoask5_postmeta pm_ci ON p.ID = pm_ci.post_id
WHERE p.post_type = 'casa'
AND p.post_status = 'publish'
AND pm_ci.meta_key LIKE 'circuito|__|_ci' ESCAPE '|'
AND (pm_ci.meta_value = 194 OR pm_ci.meta_value = 189)
... circuito_0_ci = 194 を持つ houseA を取得し、circuito_0_ci = 194 と circuito_1_ci = 189 が関連付けられている houseB を2 回取得します。
では、重複を除外するには何を変更すればよいでしょうか? 私が間違っていることは何ですか?
UPDATE1:詳細情報
投稿のテーブル スキーマ(p) postmetaのテーブル スキーマ(pm_ci)
それでもうまくいきません。投稿データベースから特定の列を選択すると、重複が除外されます。しかし、通常のワードプレスのループのように結果をループすることはできません。すべての列を選択しても:
SELECT DISTINCT p.id, p.post_author, p.post_date, p.post_date_gmt, p.post_content, p.post_title, p.post_excerpt, p.post_status, p.comment_status, p.ping_status, p.post_password, p.post_name, p.to_ping, p.pinged, p.post_modified, p.post_modified_gmt, p.post_content_filtered, p.post_parent, p.guid, p.menu_order, p.post_type, p.post_mime_type, p.comment_count
エラーが発生します:
Notice: Undefined property: stdClass::$ID in .... line 250
Notice: Undefined property: stdClass::$ID in .... line 251
// etc...
これは、クエリを定義した後の単純化された php コードです。特定の列を選択すると、これらの呼び出しはすべて失敗します。
$total_posts= $wpdb->get_results($query);
foreach ($total_posts as $post){
$post->post_name;
get_permalink($post->ID);
$coordenadas = get_field( "coords", $post->ID);
// ...
}
metaposts の 4 つの列すべてを SELECT 行に追加すると、次のようになります。
... p.comment_count, pm_ci.meta_id, pm_ci.post_id, pm_ci.meta_key, pm_ci.meta_value
これらの関数を使用しようとするとエラーが発生しますが、使用すると機能しますSELECT *
この場合、group by をどのように使用すればよいかわかりません。まだまだ勉強中。
UPDATE2:解決策を見つけました
エラーの理由は、SELECT DISTINCT p.id
を読む必要があるためSELECT DISTINCT p.ID
です。SQL クエリは大文字と小文字を区別しない方法で ID を返し、それをキー 'id' に格納しましたが、wordpress 関数が機能するには大文字のキー ('ID') が必要です。
ありがとうございました!