此代码在"slug"列中查找包含相同值的行,如果多次找到,则对它们进行分组。
更新代码:
$sql = " SELECT *,
COUNT(slug)
FROM cars
GROUP BY slug
HAVING ( COUNT(slug) > 1 )";
$q = $this->db->query($sql);
return $q;
问题是:
blue-volkswagen-2001
blue-volkswagen-2001
red-toyota-1989
red-toyota-1989
red-toyota-1989
green-mercedes-50
green-mercedes-50
我得到了这个:
blue-volkswagen-2001
red-toyota-1989
green-mercedes-50
你知道我做错了什么吗?为什么只抓第一排而不是所有重复的?
我在CodeIgniter论坛上问过这个问题,但他们不知道如何做到这一点,所以我可以接受一些SQL大师的自定义SQL查询,而不是Active Record,因为这可能是Active Record无法实现的。
您可以将INNER JOIN
与subquery
一起使用来实现这一点。
$query = "SELECT a.*, b.total_count FROM cars a INNER JOIN (SELECT slug, count(*) as total_count FROM cars GROUP BY slug HAVING count(slug) > 1 ) b ON a.slug = b.slug WHERE b.total_count > 1";
$output = $this->db->query($query );
对slug
列进行索引以提高性能。
这将以您想要的方式提供输出。
希望这有帮助:-)
使用子查询
SELECT * FROM `cars` WHERE slug IN ( SELECT slug FROM vehicle GROUP BY slug
HAVING ( COUNT(slug) > 1 ) )
SQLFIDDLE
SELECT MAX(slug)
FROM cars
GROUP BY slug
HAVING COUNT(slug) > 1