MySQL查询在" slug"中获取包含重复值的所有行柱

时间:2013-11-27 12:15:07

标签: php mysql sql

此代码正在查找“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实现。

3 个答案:

答案 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 ) )

SQLFIDDLE

答案 2 :(得分:1)

SELECT MAX(slug)
    FROM cars
    GROUP BY slug
    HAVING COUNT(slug) > 1