2011-09-02 101 views
1

我在這裏要做的是提取字符串的最後部分。字符串總是以同樣的方式結束:thisismy-string。所以我反過來搜索' - '來提取'string'(可以是任何東西)。即:'你好 - 世界'獲得'世界'SELECT DISTINCT + COUNT和一些lastIndexOf?

SELECT DISTINCT REVERSE(SUBSTR(REVERSE(field_name), 1, INSTR(REVERSE(field_name), '-')-1)) AS grp FROM table GROUP BY grp ORDER BY id 

這工作正常。現在我怎樣才能計算次數,SQL在執行DISTINCT函數時發現了相同的'字符串結束'?是否有可能在同一個查詢中合併?我使用這個查詢PHP項目...

回答

2
SELECT 
    COUNT(*) AS `occurrences`, 
    SUBSTRING_INDEX(`field_name`, '-', -1) AS `last_part` 
FROM table 
GROUP BY `last_part` 

SUBSTRING_INDEX([field or string], [delimiter], -1)將讓你的最後部分(由於-1),COUNT()方面分組

編輯:您的標題說,一些關於「lastIndexOf」,我假設你是指每個分組的最高id。那你可以通過添加MAX(`id`)到田裏你選擇

SELECT 
    COUNT(*) AS `occurrences`, 
    SUBSTRING_INDEX(`field_name`, '-', -1) AS `last_part`, 
    MAX(`id`) AS `last_index_of` 
FROM table 
GROUP BY `last_part` 

例做

id | field_name 
------------------------ 
1 | foo-bar 
2 | woo-bar 
3 | woo-foo-baz 
4 | foo-foo 
5 | foo-boo 
6 | foo-bar 
7 | foo-baz 
8 | kung-foo 
9 | xyz-xyz 
10 | 123-xyz 

結果:

occurrences | last_part | last_index_of 
---------------------------------------- 
3   | bar  | 6 
2   | baz  | 7 
1   | boo  | 5 
2   | foo  | 8 
2   | xyz  | 10 
+0

這隻給了我1 'last_part' 在我的查詢返回所有最後的部分。我失蹤的東西? – Eric

+0

@Eric:不知道我明白「只有最後一部分」是什麼意思嗎?在我自己的數據庫上測試它,它似乎可以滿足您的需求。你可以編輯你的答案給出一個更全面的例子,你擁有的數據和你想要的結果? – Flambino

+0

確定它工作謝謝:)) – Eric