MySQL相同的值一次

时间:2015-03-07 15:53:26

标签: mysql

对不起,我会说一点英语。

CREATE TABLE `links` (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
category_id INT NOT NULL, -- 1: Facebook, 2: Twitter, ...
url VARCHAR(8) NOT NULL,
state TINYINT(1) NOT NULL -- boolean
);

INSERT INTO `links` ( `id`, `category_id`, `url`, `state` ) VALUES
( 1, 1, 'cnn', 1 ), -- Facebook
( 2, 2, 'cnn', 1 ), -- Twitter
( 3, 1, 'bbc', 1 ), -- Facebook
( 4, 2, 'bbc', 1 ), -- Twitter
( 5, 1, 'cnn', 1 ), -- It's wrong. This is same as id=1
( 6, 1, 'cnn', 1 ), -- It's wrong. This is same as id=1 (and id=5)
( 7, 1, 'abc', 0 ); -- It's wrong. This is state!=1.

我想在MySQL SELECT之后显示这个......

category_id | count
1             2
2             2

这是:

SELECT * FROM `links` ???

感谢。

3 个答案:

答案 0 :(得分:1)

尝试类似:

SELECT category_id, COUNT(DISTINCT url) AS count
FROM links
WHERE state = 1
GROUP BY category_id

答案 1 :(得分:0)

你需要不同的计数和分组

select 
category_id,
count(distinct url) as `count` 
from links where state = 1 group by category_id ;

答案 2 :(得分:0)

要避免插入5和6,请将其添加到表格中:

UNIQUE(`category_id`, `url`)

如果您不想插入state = 0,请不要指定它。将DEFAULT '1'添加到state的声明中,并从INSERT中删除该列。

就此而言,您也可以从INSERT中删除id和1..7,因为这就是AUTO_INCREMENT的全部内容。

相关问题