SELECT * FROM `goods_index` WHERE `price` > 100 OR `price` = 0;
100 tugriksを超える価格のすべての商品をインデックスから選択するか、価格が指定されていない場合
しかし、もちろん、解決策があります:計算を使用します。 私が思いついた例のリクエストを次のように書き直します。
SELECT *, IF(`price` > 100, 1, 0) + IF(`price` = 0, 1, 0) AS `pricematch` FROM `goods_index` WHERE `pricematch` = 1;
pricematch
Theは、価格が100以上またはゼロに等しい場合、価格一致は常に1になり、レコードが一致するかどうかを確認するには、
pricematch
一致
pricematch
1に等しいかどうかを確認するだけで十分です。
SphinxQLおよび従来のSQLクエリでこのような計算を使用すると、クエリが「または」条件を必要とする他の状況で状況から抜け出すことができます。
更新します。
コメントのartifexは、SELECTステートメントでORを使用して、より透明で読みやすいオプションを提供します。
SELECT *, (`price` > 100 OR `price` = 0) AS `pricematch` FROM `goods_index` WHERE `pricematch` > 0;
アップデート2。
問題に直面しました:データベースのインデックス付き属性はBIGINT型です。 Sphinxは、設定で次のように記述されています
sql_attr_bigint = myattr
同時に、そのようなリクエストは希望する結果をもたらさず、空のセットを返します:
SELECT * FROM index WHERE myattr > 87124599823547;
「or」条件と同様に、式をSELECTセクションに移動すると役立ちました。
SELECT *, ( myattr > 87124599823547 ) AS attrmatch FROM index WHERE attrmatch = 1;