2010-05-21 6 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_articles, users
WHERE users_articles.user_id = users.user_id
GROUP BY user_id
ORDER BY coun DESC
LIMIT 1

+1

его лучше использовать явное INNER JOIN синтаксис. делает его более читаемым – Gunjan

+0

Это не сработало – gew

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 

Я испытал это, и она работает.
Таблица результатов содержит количество статей пользователя, идентификатор пользователя и его имя пользователя.

0

выберите u.user_id, граф (ua.id), как NUM_ARTICLES от пользователей у левого внешнего соединения users_articles иа на u.user_id = ua.user_id группы u.user_id порядка по убыванию NUM_ARTICLES

Левое внешнее соединение (в отличие от внутреннего соединения) гарантирует, что все пользователи представлены в результате, независимо от того, имеют ли они запись в users_articles или нет.

EDIT: Поскольку вам нужен только тот, кто подал большинство статей, вам необязательно нужно левое внешнее соединение (если есть хотя бы один пользователь, который написал какие-либо статьи). Однако для полного списка это было бы полезно.

+0

это не позволит мне отображать имя пользователя только по количеству статей? – gew

+0

Давай, просто добавьте 'u.username' в список полей. Stackoverflow не освобождает вас от необходимости думать самостоятельно. –

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 Теперь это может дать пользователю USERNAME :) он знает, какой идентификатор пользователя и whats username :) –

0

Какой бы выше запросы, данные вундеркиндов и использовать только НЕ ЗАБУДЬТЕ поле «имя пользователя» в запросе на выборку INCLUDE поскольку ни один из них не включил поле Имя пользователя

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