1

私はすでに同様の解決済みの質問をすべて見てきましたが、まだ解決策を見つけていません。

だから、このワードプレスにはハウスとサーキット(カスタム投稿タイプ)があります。家には複数の回路を接続できます (リピータ カスタム フィールド)。クエリは動的に作成され、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') が必要です。

ありがとうございました!

4

1 に答える 1

1

あなたの使用 DISTINCT *。これは、1 つの列の 1 つの値が (別の行から) 異なる場合に表示されることを意味します。

代わりにすべきことは、個別に書き込み、その後に関心のある特定の列を続けることです。

したがって、特定の家だけに興味がある場合は、

例:

select distinct houses
FROM ...

フォーマットの使用:

select distinct
p.post_type
    FROM ...

GROUP BYまた、家にあるさまざまな回路の数をカウントするために使用することもできます。

于 2013-11-13T22:24:15.670 に答える