Iki tablodaki verileri görüntülemek için nasıl MySQL

5 Cevap php

Ben en çok makaleleri sunmuştur kişinin adını görüntülemek için çalışıyorum ama MySQL ve kullanarak bunu nasıl bilmiyorum PHP, birisi bana yardımcı olabilir?

İşte MySQL kodudur.

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)
);

İşte ben bugüne kadar sahip kodudur.

$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");

5 Cevap

Eğer kullanıcı adı almak istiyorsanız, size bir sonraki sorgu kullanmanız gerekir:

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
select u.user_id, count(ua.id) as num_articles
  from users u
  left outer join users_articles ua
    on u.user_id = ua.user_id
 group by u.user_id
 order by num_articles desc

(Bir iç birleşim aksine) sol dış birleşim tüm kullanıcılar sonucu temsil edilmesini sağlar olursa olsun, onlar users_articles ya da bir kayıt varsa.

EDIT: sadece en makaleleri sunmuştur kişi istiyorum beri, mutlaka (sürece herhangi makaleler yazmıştır en az bir kullanıcı gibi) sol dış birleşim gerekmez. Tam liste için, bu ancak, yararlı olacaktır.

Sadece bunlardan hiçbiri select sorgusunda "username" INCLUDE alanı UNUTMAYIN u kullanmak meraklılarının tarafından verilen sorguları yukarıdaki hangisi username alanı yer verdi

Ne yapmak istediğinizi bir join olduğunu.

İhtiyacınız SQL sorgusu şudur:

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

I tested this and it works.
The result table contains the number of articles of the user, its user id and its username.

Bu gibi kullanmak,

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