此代码正在查找“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大师而不是Active Record接受自定义SQL查询,因为这可能无法用Active Record实现。
答案 0 :(得分:2)
您可以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
列以提高性能。
这将按照您想要的方式提供输出。
希望这会有所帮助: - )
答案 1 :(得分:1)
使用子查询
SELECT * FROM `cars` WHERE slug IN ( SELECT slug FROM vehicle GROUP BY slug
HAVING ( COUNT(slug) > 1 ) )
答案 2 :(得分:1)
SELECT MAX(slug)
FROM cars
GROUP BY slug
HAVING COUNT(slug) > 1