2017-09-29 17 views
-1

こんにちは、productsというテーブルにkm(varchar)という列があります。したがって、kmは保存されている任意の数値にすることができます。今私は100〜1000mysqlがこのクエリに適切な結果を返さない

キロはそうクエリは、この

SELECT * 
    FROM products1 
WHERE categories_category_id = 1 
    AND subsubCategoryId = 1026 
    AND subcat = 174 
    AND categoryAdvertiseTypeId = 0 
    AND km >= 1000 
    AND km <= 5000 
LIMIT 50 

のように見えるところ私は結果をしたいが、ある何が起こっているのか、私がこの範囲からではなくキロメートルを得るように、この列を照会します。理由は分かりません。何が問題なのか教えてください。

+6

varcharで数学を行うことはできません。キャストするか整数型に変更する必要があります –

+0

@ Fred-ii-だから私は送信している値をキャストする必要がありますか? –

+0

なぜ値をキャストするかは、簡単にタイプを変更するだけです。 – F0XS

答えて

2

キロメートルkmの列を数値にキャストして比較します。物事の化粧側

SELECT * 
FROM products1 
WHERE 
    categories_category_id = '1' AND 
    subsubCategoryId = '1026'  AND 
    subcat = '174'    AND 
    categoryAdvertiseTypeId = '0' AND 
    CAST(km AS UNSIGNED) BETWEEN 1000 AND 5000 
LIMIT 50 

、私は醜いと読みクエリはハード作るすべてのそれらの不要なバッククォートを、削除しました。

+0

確かに、彼らは彼らのvarchar型の列を変更する必要があります。 –

+0

@ Fred-ii- 'km'はまだ数値ではないと誰が言っていますか? –

+1

'こんにちは、私は製品'と呼ばれるテーブルの列km(varchar)を持っています:D –

関連する問題