0

私は現在、Wordpress の WP-Property プラグインを利用するサイトに取り組んでいます。

基本的に、特定の価格帯のテキスト検索リンクの横にカウンターを表示しようとしています。

以下は、私が実行しているクエリで、価格帯のカウントは完全に問題ありません。

  $apartprice1 = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->postmeta WHERE meta_value BETWEEN 50000 AND 74999");
if (0 < $apartprice1) $apartprice1 = number_format($apartprice1);

ただし、これを拡張して、この特定の価格帯にある「アパート」のみを表示したいと思います。ここで、meta_value列内にプロパティ タイプの値 (アパート、住宅、所有地) も格納されていることに注意してください。

私のためにこれをわかりやすく説明できる人はいますか?

編集:以下の詳細:

Table name is postmeta

meta_id     post_id     meta_key        meta_value

348         41          property_type   apartment
358         41          price           698000

そのため、特定のプロパティ タイプに基づく特定の価格帯のカウントを実行できるようにしたいと考えています。

4

2 に答える 2

0

このテーブル構造により、探しているタイプの多面的な検索を実行するのがやや困難/非効率になります。すべての句が満たされていることを確認するには、それ自体にテーブルをWHERE設定する必要があります。これにより、クエリにより適した一時的なデータ形式が得られます。INNER JOINmeta

SELECT m1.post_id
FROM meta m1
INNER JOIN meta m2 ON m1.post_id = m2.post_id
WHERE m1.meta_key = 'price'
AND m1.meta_value
BETWEEN 50000 AND 7000000 AND m2.meta_key = 'property_type'
AND m2.meta_value = 'apartment'

追加するファセットごとに、追加のを実行する必要があることに注意してくださいINNER JOIN。また、まだ持っていない場合は、post_id列にインデックスを付けることをお勧めします。

カウントを取得するには、SELECT句の内容を変更するだけです。

SELECT COUNT(*)
FROM meta m1
INNER JOIN meta m2 ON m1.post_id = m2.post_id
WHERE m1.meta_key = 'price'
AND m1.meta_value
BETWEEN 50000 AND 7000000 AND m2.meta_key = 'property_type'
AND m2.meta_value = 'apartment'
于 2012-09-23T15:16:16.763 に答える
0

、、、の各プロパティ値のカウントを表示する場合はpartmentshousesfreeholdsGROUP BY property_type

SELECT  property_type, COUNT(*) 
FROM $wpdb->postmeta 
WHERE meta_value BETWEEN 50000 AND 74999
GROUP BY property_type

更新:次のように説明した方法でデータを取得するには、行を列にピボットする必要があります。

SELECT t.property_type, COUNT(t.post_id) AS 'type count'
FROM
(
   SELECT t.post_id,
     MAX(CASE WHEN t.meta_key = 'property_type' THEN t.meta_value END) AS property_type,
     MAX(CASE WHEN t.meta_key = 'price' THEN CAST(t.meta_value AS DECIMAL) END) AS Price
   FROM postmeta t
   GROUP BY t.post_id
) t
WHERE t.property_type = 'apartment' 
  AND t.Price BETWEEN 600000 AND 700000
GROUP BY t.property_type

meta_valueフィールドはプロパティ タイプの文字列値とprices の数値の両方を格納することにCASTなってDECIMALいるので、後で計算できるように数値データ タイプとして選択する必要があることに注意してください。MAX行をピボットするための回避策として、集約関数としても使用しました。

これはSQL fiddleのデモです。

これは、エンティティー属性値モデルと呼ばれる設計モデルで通常遭遇するものです。の下に、このデータ モデルに関する有用なスレッドが多数あります。次の回答で、この設計モデルに関するより有用なページを見つけることもできます

于 2012-09-23T13:49:10.053 に答える