0

さて、私はmysqlクエリを持っています.table_1の両方のパラメータを検索したいのですが
、「php」でアイデアを示してみます.

if(table_2_params.params_id == 124){
   //select LIKE  "%EXTEC (Sandvik)%" from  table_2_params.nosaukums
}
elseif(table_2_params.params_id == 126){
  //SELECT  FROM table_2_params WHERE nosaukums is BETWEEN  "2010" AND  "2012"
}

最初と 2 番目のパラメーターを表示するクエリを実行したい...(両方とも一致する)
daymn 私が言いたいことを理解してくれることを願っています...

さて、ここに mysqlクエリがあります:

 SELECT table_1 . * , table_2_params . * 
    FROM table_1, table_2_params
    WHERE table_1.pamat_kat_sad =  '756'
    AND table_1.preces_id = table_2_params.preces_id
    AND (
        (
        table_2_params.params_id =124
        AND table_2_params.nosaukums LIKE  "%EXTEC (Sandvik)%"
        )
        AND (
        table_2_params.params_id =126
        AND table_2_params.nosaukums
        BETWEEN  "2010"
        AND  "2012"
        )
    )
    ORDER BY table_1.preces_id DESC

問題は、table_2_params.nosaukumsタイプがlongtext...

でのみ選択した場合

    AND (
    table_2_params.params_id =126
    AND table_2_params.nosaukums
    BETWEEN  "2010"
    AND  "2012"
    )

それは正しい年を表示します...そして、私がのみを選択した場合

(
    table_2_params.params_id =124
    AND table_2_params.nosaukums LIKE  "%EXTEC (Sandvik)%"
    )

また、正しい値が表示されます...

しかし、私は両方を一緒に機能させることはできません..

私を助けてください!

ありがとうございました!

4

2 に答える 2

0

2 セットの条件が必要な場合は、 を使用してORください。また、テーブル間の結合は次を使用して実行する必要があることに注意してください(INNER|LEFT) JOIN

SELECT
    table_1.*
    , table_2_params.* 
FROM
    table_1
    INNER JOIN table_2_params
        ON table_1.preces_id = table_2_params.preces_id
WHERE
    table_1.pamat_kat_sad =  '756'
    AND
    (
        (
            table_2_params.params_id =124
            AND table_2_params.nosaukums LIKE '%EXTEC (Sandvik)%'
        )
        OR
        (
            table_2_params.params_id =126
            AND table_2_params.nosaukums BETWEEN '2010' AND '2012'
        )
    )
ORDER BY
    table_1.preces_id DESC

最後に、mysql はインデックスを使用できないため、クエリのパフォーマンスが低下する可能性があります。AND table_2_params.nosaukums LIKE '%EXTEC (Sandvik)%'

于 2012-10-03T07:13:40.343 に答える
0

問題はここにあります:

 AND (
    (
    table_2_params.params_id =124          #remove this check
    AND table_2_params.nosaukums LIKE  "%EXTEC (Sandvik)%"
    )
    AND (
    table_2_params.params_id =126          #or remove this check
    AND table_2_params.nosaukums
    BETWEEN  "2010"
    AND  "2012"
    )
)

params_id が 124 と 126 の両方であるかどうかを比較しようとしますが、うまくいきません。これらの比較のいずれかを削除すると、クエリが機能するはずです! :)

于 2012-10-03T07:04:03.137 に答える