2011-09-02 87 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