2013-02-16 22 views
0

我有我的搜索選項的這個問題。 我的問題是,它給了我重複。它不可能,因爲如果我通過ID搜索它給了我兩行,並且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 

可我爲了用什麼來避免重複?也許不會加入。

+0

在與您的ID相關聯的SMS_MONTIME表中是否有多個記錄? – sgeddes 2013-02-16 15:05:29

+0

我怎麼沒有想到...... – pyetjegoo 2013-02-16 15:07:07

+0

有時它只是需要一組不同的眼睛。 – 2013-02-16 15:25:48

回答

2

這種情況發生時,你在SMS_MONTIME表更是一排用IDTICKET等於單個forma.ID嘗試。例如,如果只有forma表中的一行ID等於10,則可能在SMS_MONTIME中有兩行,而IDTICKET等於10。然後你得到結果中的兩行,來自forma表的重複信息和來自SMS_MONTIME表的不同信息。

除非你重新考慮你想要的結果,否則你無法避免這種情況。如何處理SMS_MONTIME表的信息?您可能需要使用單獨的查詢來提取所需信息,或者您可能會處理結果(包含重複項)以提取所需信息。

+0

這個答案告訴你你有重複的原因。關於避免它們,即使您使用@sansix建議的「select distinct」,也可能無法實現。它取決於您想要檢索的數據,並且在編寫查詢之前應該知道這一點。 – 2013-02-16 15:10:37

0

你與DISTINCT

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

檢查this link

+0

我如何在我的查詢上面實現這個請... ...? – pyetjegoo 2013-02-16 15:05:18

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 

希望這會有所幫助。