2010-05-21 65 views
2
显示数据

我想显示谁提交了大多数文章的人的用户名,但我不知道如何使用MySQL & PHP这样做,可有人能帮助我吗?的MySQL如何从两个表

这里是MySQL的代码。

CREATE TABLE users (
user_id INT UNSIGNED NOT NULL AUTO_INCREMENT, 
username VARCHAR(255) DEFAULT NULL, 
pass CHAR(40) NOT NULL, 
PRIMARY KEY (user_id) 
); 

CREATE TABLE users_articles (
id INT UNSIGNED NOT NULL AUTO_INCREMENT, 
user_id INT UNSIGNED mNOT NULL, 
title TEXT NOT NULL, 
acontent LONGTEXT NOT NULL, 
PRIMARY KEY (id) 
); 

这是我到目前为止的代码。

$mysqli = mysqli_connect("localhost", "root", "", "sitename"); 
$dbc = mysqli_query($mysqli,"SELECT COUNT(*) as coun, user_id 
          FROM users_articles 
          GROUP BY user_id 
          ORDER BY coun DESC 
          LIMIT 1"); 

回答

0

SELECT COUNT(*) as coun, user_id, users.username
FROM users_articlesusers
WHERE users_articles.user_id = users.user_id
GROUP BY user_id
ORDER BY coun DESC
LIMIT 1

+1

它能够更好地使用显式INNER JOIN语法。使其更具可读性 – Gunjan 2010-05-21 06:47:35

+0

这并没有工作 – gew 2010-05-21 06:50:14

0

你想要做什么是join

你需要的SQL查询是这样的:

SELECT COUNT(*) as coun, users.user_id, username 
FROM users_articles 
INNER JOIN users 
ON users_articles.user_id = users.user_id 
GROUP BY user_id 
ORDER BY coun DESC 
LIMIT 1 

我测试了这一点,它的工作原理。
结果表包含用户的文章数量,用户ID和用户名。

0

选择u.user_id,计数(ua.id),如从用户NUM_ARTICLES ù 上u.user_id = ua.user_id 组左外连接users_articles UA 通过u.user_id 为了通过NUM_ARTICLES降序

左外连接(相对于内部连接)确保所有用户都在结果表示的,如果它们具有在users_articles或不记录不管。

编辑:既然你只想谁提交了大多数文章的人,你不一定需要左外连接(只要有谁写任何文章至少一个用户)。然而,对于完整的列表来说,这将是有用的。

+0

这不会让我显示用户名只是文章的数量? – gew 2010-05-21 07:01:02

+0

加油,只需将'u.username'添加到字段列表中。 Stackoverflow并不能解除你必须自己思考的问题。 – 2010-05-21 09:20:51

1

如果你想获得用户的名字,你应该使用一个查询:

SELECT users.name, COUNT(users_articles.id) AS coun 
FROM users_articles 
LEFT JOIN users_articles ON users.id=users_articles.user_id 
GROUP BY users_articles.user_id 
ORDER BY coun DESC 
LIMIT 1 
+0

+1现在,这可以给你的用户名:)他知道什么用户ID和什么用户名:) – 2010-05-21 07:03:18

0

无论由怪才u使用只是不要忘记给上述查询包括选择查询“用户名”场因为它们都没有包括用户名字段

0

使用这样的,

SELECT COUNT(users_articles.*) as coun, users_articles.user_id, users.username 
FROM users_articles, users 
WHERE users_articles.user_id = users.user_id 
GROUP BY users.user_id 
ORDER BY coun DESC