0

アイデア: 特定の州または州内の都市のトレイルのリストを取得する。

データベース テーブルは wp_postmeta で、使用するテーブルの列は post_id、meta_key、meta_value です。

post_id は複数の行で同じにすることができます meta_key は「location_state」「location_city」または「trail_type」のいずれかでなければなりません

データベースの各行を調べて、同じ行から を探してpost_meta.meta_value = 'Arizona'取得しますpost_id

post_id次に、その状態で見つかった foreachでpost_meta.meta_key = 'trail_type'、post_id が一致する値を探します。これは、post_id が他のものではなく、トレイルに関連付けられていることを意味します。その状態のトレイルである post_id の配列を返します。$trails_in_state という配列に

これで、状態にあるすべてのトレイルのリストを ID で取得できました。

また、その州の都市のすべてのトレイルを別のクエリに取得して、ページがいつヒットしたかを知ることができるようにしたいと考えています

<?php if( isset($_GET['city']) AND isset($_GET['state']) ) {
   // GET AN ARRAY OF ALL post_id's OF TRAILS IN THAT CITY STATE COMBO
} elseif( isset($_GET['state'])) {
   // GET AN ARRAY OF ALL post_id's OF TRAILS IN THAT STATE
}

これはテーブル構造の画像ですhttp://imgur.com/ijhR1NZ

私はワードプレスを使用しているため、この場合、mysqli を簡単に使用することはできません。

4

2 に答える 2

1

これらはあなたを始めるべきだと思います。最初は、meta_value が入力と等しいすべての post_id を選択する必要があります。部分一致がうまく機能するはずの州または都市ごとに制限する必要がある理由がわかりません。都市のみでフィルタリングするためのより具体的な一致は、2 番目のオプションです。

SELECT Trail_type FROM wp_postmeta WHERE post_id=(SELECT post_id FROM wp_postmeta WHERE meta_value='アリゾナ')

SELECT Trail_type FROM wp_postmeta WHERE post_id=(SELECT post_id FROM wp_postmeta WHERE meta_value='Arizona' AND meta_key='location_city' )

複数選択と並べ替え、またはおそらく UNION クエリのいずれかを見ていることに失敗すると、そのテーブル構造について頭を悩ませることができません:(

于 2013-01-22T15:26:24.787 に答える
0

次のようなものを使用できないのはなぜですか。

SELECT post_id FROM wp_postmeta WHERE meta_key = "State" AND meta_value = "mysql_escape_string($state)"

于 2013-01-22T15:29:28.503 に答える