2015-06-11 50 views
1

我有一個名爲條目的mysql表。該行是:成員ID標題加入Mysql:如何找到不同的其他行值當其中一個行開始相同的字符串

與phpMyAdmin,最新的100線(排序:添加,DESC)中,我需要:

  • 只有當標題以相同的20個字符串開始時才起作用(字符串的末尾不同,而不是開頭)
  • 當和標題包含相同的開始,那麼是時候生成包含(1)完整的標題,(2)ID和(3)已使用該標題的名稱的名單的列表。
  • 這個列表將在此後用肉眼檢查,所以有 沒有嚴格的規則,如何清單必須看,只要它工作 這是很好的。最終,這將更像最近的1000個條目,因此肉眼需要這種預過濾。

我可以做自己最好的(對不起!)是輸出的每個條目的通用列表,手動搜索,與我的眼睛,在情況下,當標題開始用相同的字符:

SELECT title, member FROM (
SELECT * FROM entries 
ORDER BY added 
DESC 
LIMIT 0, 100 
) AS olitest 
ORDER BY title 

從計算器上過去的問題,我寫的太差,兩個不完整提出了修訂建議,他們可能是一個開始

那一個不會給成員編號並且不限於最新的100行

select left(e.title, 20), group_concat(title) as titles 
from entries e 
group by left(e.title, 20) 
having count(*) > 1; 

那一個顯示一個標題線的總數,基本上。

select left(e.title, 20), count(*), max(title) 
from entries e 
group by left(e.title, 20) 
having count(*) > 1; 

更多的是超出我的技能,唉。 您是否看到這可以做到?

回答

1

我發佈這個答案,但我不認爲它會讓你到你的最終結果。我正在做它的格式和可讀性,因爲評論不提供格式。

我一直在努力尋找類似於您的需求,沒有運氣,但這可能會讓你更接近。

CTE是一個公用表表達式。它建立一個臨時表上

WITH CTE (left(title, 20), DuplicateCount) 
AS 
(
SELECT left(title, 20), 
ROW_NUMBER() OVER(PARTITION BY left(title, 20) ORDER BY ID) AS DuplicateCount 
FROM entries 
) 
SELECT * 
FROM CTE 
WHERE DuplicateCount > 1 

工作這應該給你用DuplicateCount顯示旁邊的名稱匹配的標題的輸出。當DuplicateCount大於1時,您需要完成您的工作。

如果沒有這個作品嚐試這個.....

SELECT left(title, 20), 
ROW_NUMBER() OVER(PARTITION BY left(title, 20) ORDER BY ID) AS DuplicateCount 
FROM entries 
+1

我想你可以使用最後一段代碼來開始。 –

相關問題