[解決済み] 複数のwhereステートメントを持つSQLクエリ
2022-03-04 12:36:22
質問
私にとってはかなり複雑なmysqlのクエリを持っていますが、完全に行き詰っており、オンラインで答えを見つけることができません。
以下は私のクエリです。
SELECT
items.*
FROM
items
INNER JOIN
items_meta_data
WHERE
(
(meta_key = 'lat' AND meta_value >= '55')
OR
(meta_key = 'lat' AND meta_value <= '65')
)
AND
(
(meta_key = 'long' AND meta_value >= '20')
OR
(meta_key = 'long' AND meta_value <= '30')
)
GROUP BY
item_id
もちろん、1つのステートメントだけでクエリをテストしましたが、それは問題なく動作しました。つまり、longまたはlatの部分のみを渡すと、結果が得られます。ただ、それらをつなぎ合わせると、異なる結果が得られます。
よろしくお願いします。
テーブルの構成は以下の通りです。
テーブルの項目です。 ID 項目名 項目説明
テーブルメタ。 meta_id アイテムID メタキー メタ値
解決方法
この問題にようやく取り組むことができたので、興味のある方にお知らせします。皆さんのご協力とご教示に感謝します。
SELECT
SQL_CALC_FOUND_ROWS items.*
FROM
items
INNER JOIN
items_meta ON (items.ID = items_meta.post_id)
INNER JOIN
items_meta AS m1 ON (items.ID = m1.post_id)
WHERE
1=1
AND
items.post_type = 'post'
AND
(items.post_status = 'publish')
AND
( (items_meta.meta_key = 'lat' AND CAST(items_meta.meta_value AS SIGNED) BETWEEN '55' AND '65')
AND
(m1.meta_key = 'long' AND CAST(m1.meta_value AS SIGNED) BETWEEN '20' AND '30') )
GROUP BY
items.ID
ORDER BY
items.date
DESC
解決方法は?
を考慮する必要があります。
GROUP BY
の後に発生します。
WHERE
節条件が評価された。そして
WHERE
節は常に1つの行だけを考慮します。つまり、クエリでは
meta_key
の条件では、常にレコードが選択されないようにします。
1つの列が1つの行に対して複数の値を持つことはできない
.
また、冗長なmeta_valueのチェックはどうでしょうか?もしある値が与えられた値より小さくも大きくもなることが許されるなら、その実際の値は全く問題ではなく、チェックを省略することができる。
あるコメントによると、あなたは与えられた場所からある距離以下の場所をチェックしたいようですね。正しい距離を得るためには、実際にはある種の適切な距離関数を使う必要があります。 この質問 をご覧ください。) しかし、このSQLは、どのように始めればよいかを教えてくれるはずです。
SELECT items.* FROM items i, meta_data m1, meta_data m2
WHERE i.item_id = m1.item_id and i.item_id = m2.item_id
AND m1.meta_key = 'lat' AND m1.meta_value >= 55 AND m1.meta_value <= 65
AND m2.meta_key = 'lng' AND m2.meta_value >= 20 AND m2.meta_value <= 30
関連
-
[解決済み】MAMPのmysqlサーバーが起動しない。mysqlのプロセスが起動していない
-
コマンドでmysqlに接続中、'mysql'が内部または外部コマンドとして認識されない エラーは解決されました。
-
[解決済み] Error Dropping Database (Can't rmdir '.test', errno: 17)
-
[解決済み] エラー:テーブル '<table-name>' に対するユーザー '<userid>'@'<ip-address>' への select コマンドが拒否されました。
-
[解決済み] JDBC経由でMySQLにUTF-8を挿入しようとすると、"不正な文字列値 "と表示される?
-
[解決済み] エラー 1049 (42000)。不明なデータベース
-
[解決済み] Mysql: const テーブルを読み込んだ後、不可能な場所に気づいた。
-
[解決済み] テーブルがクラッシュしたと判定されたため、修復する必要があります。
-
[解決済み] PHPでSQLインジェクションを防ぐにはどうしたらいいですか?
-
[解決済み] MySQLでコマンドラインを使用してSQLファイルをインポートするにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】MySQLのエラーコードです。MySQL WorkbenchでUPDATE中に1175のエラーが発生しました。
-
MySQLとのPython統合でAttributeErrorが発生する: モジュール 'socket' には 'AF_UNIX' という属性がない
-
[解決済み] mysql.pluginテーブルを開くことができません。mysql_upgradeを実行し、作成してください。
-
[解決済み] MySQL エラー 1093 - FROM 句で更新のターゲット テーブルを指定できません。
-
[解決済み] MySQLを使用したパーセンタイル値の計算
-
[解決済み] JDBC経由でMySQLにUTF-8を挿入しようとすると、"不正な文字列値 "と表示される?
-
[解決済み] エラーコードです。1215. 外部キー制約を追加できません (外部キー)
-
[解決済み] MySQLの更新datetimeフィールド
-
[解決済み] MySQLのカラムを並べ替えるには?
-
[解決済み] MySQL 大圏航路距離(Haversine 式)