0

検索オプションにこの問題があります。私の問題は、重複が発生することです。ID で検索すると 2 つの行が返され、ID は一意であるため、それは不可能です。これは私が使用するクエリです:

SELECT forma.*, SMS_MONTIME.IDTICKET, SMS_MONTIME.MBYLLUR,SMS_MONTIME.time_added
FROM forma 
LEFT JOIN SMS_MONTIME ON forma.ID = SMS_MONTIME.IDTICKET where forma.$kategoria LIKE '%$search%' ORDER BY forma.ID 

重複を避けるために何を使用できますか? たぶん参加しません。

4

3 に答える 3

2

SMS_MONTIMEこれは、テーブルに1つにIDTICKET等しい行が複数ある場合に発生しますforma.ID。たとえば、formaテーブルににID等しい行が1つしかない場合、に等しい10行が2つある可能性があります。次に、結果に2つの行があり、テーブルからの重複情報とテーブルからの個別の情報が含まれます。SMS_MONTIMEIDTICKET10formaSMS_MONTIME

あなたが望む結果を再考しない限り、これを避けることはできません。テーブルの情報を区別するにはどうすればよいSMS_MONTIMEですか?個別のクエリを使用して必要な情報を抽出する必要がある場合や、結果を(重複して)処理して必要な情報を抽出する場合があります。

于 2013-02-16T15:05:31.877 に答える
0

試してみましたかDISTINCT

SELECT DISTINCT column_name(s)
FROM table_name
Where <conidition>

このリンクを確認してください

于 2013-02-16T15:04:18.227 に答える
0

私のコメントで述べたように、SMS_MONTIME テーブルに複数のレコードがある場合、重複を受け取ることになります。単一のレコードのみを受け取りたい場合は、MAX(time_added) を取得して、そのレコードを表示するだけです。次に例を示します。

SELECT forma.*, SMS_MONTIME.IDTICKET, SMS_MONTIME.MBYLLUR,SMS_MONTIME.time_added
FROM forma 
    LEFT JOIN (
        SELECT IDTICKET, MAX(time_added) max_time_added
        FROM SMS_MONTIME 
        GROUP BY SMS_MONTIME.IDTICKET
    ) SMS_MONTIME_MAX ON forma.ID = SMS_MONTIME_MAX.IDTICKET 
    LEFT JOIN SMS_MONTIME ON 
        forma.ID = SMS_MONTIME.IDTICKET AND SMS_MONTIME.time_added AND SMS_MONTIME_MAX.max_time_added
WHERE forma.$kategoria LIKE '%$search%' 
ORDER BY forma.ID 

お役に立てれば。

于 2013-02-16T15:14:32.093 に答える