2011-12-07 24 views
9

Vì vậy, tôi có một truy vấn mysql truy vấn một bảng "liên hệ" mỗi liên hệ sau đó đã mua hàng. Giao dịch mua trong bảng có liên quan. Tôi muốn hiển thị mỗi tên địa chỉ liên lạc với số lượng mua họ đã thực hiện sang bên phải như thế này:Bản ghi liên quan đến số lượng MYSQL một truy vấn

Adam(1) 
Mike(8) 
Steve(3) 

sql hiện tại của tôi trông như thế này:

SELECT * FROM contacts ORDER BY contacts.name ASC" 

và bảng hiện tại của tôi trông như thế này:

Adam 
Mike 
Steve 

Để kéo tổng số (mua) bảng liên quan vào bảng hiện tại, tôi biết tôi phải tham gia bảng "mua hàng" một số cách sau đó sử dụng GROUP BY và count() ction nhưng tôi không chắc chắn làm thế nào để xây dựng câu lệnh sql này. Ai đó có thể giúp tôi.

Một lần nữa tất cả tôi đang cố gắng làm là liệt kê một bảng (danh bạ) và đếm nó ghi (mua) liên quan và có nó trông như thế này:

Adam(1) 
Mike(8) 
Steve(3) 

Cảm ơn bạn rất nhiều vì đã giúp đỡ nào.

Trả lời

21

Giả sử bảng purchases có một khóa ngoại đến bảng contacts gọi contact_id, một cái gì đó truy vấn như thế này nên làm việc:

SELECT c.name, count(p.contact_id) 
FROM contacts AS c 
LEFT OUTER JOIN purchases AS p 
ON p.contact_id = c.contact_id 
GROUP BY c.contact_id 
ORDER BY c.name ASC 

Truy vấn này sẽ đưa tính trong một cột riêng, mà tôi khuyên bạn. Nếu bạn phải định dạng nó theo cách bạn đã chỉ ra bằng dấu ngoặc đơn sau tên, bạn có thể sử dụng hàm concat() của MySQL. Một cái gì đó như thế này:

SELECT concat(c.name, '(', count(p.contact_id), ')') AS Name_And_Count_Together 
FROM contacts AS c 
LEFT OUTER JOIN purchases AS p 
ON p.contact_id = c.contact_id 
GROUP BY c.contact_id 
ORDER BY c.name ASC 
+1

Cảm ơn bạn rất nhiều, đã làm việc như một sự quyến rũ. Vui vì tôi được đăng ở đây bc tôi sẽ không bao giờ tự tìm ra điều đó. Cám ơn bạn một lần nữa. – user982853

+0

Có thể thêm ngày mua hàng cuối cùng vào truy vấn đầu tiên? – ipel

+1

@ipel Chắc chắn. Bạn có thể thêm một cái gì đó như max (p.purchase_date) vào danh sách lựa chọn. – Asaph

0

Truy vấn cần thiết sẽ là một cái gì đó như thế này (tôi không biết giản đồ của bạn):

SELECT c.name, count(p.id) FROM contacts c 
JOIN purchases p ON (c.id = p.id) 
GROUP BY p.id 
ORDER BY contacts.name ASC 
+2

Việc tham gia bên ngoài sẽ được khuyến khích để bạn có thể bao gồm các liên hệ có số lần mua bằng không. – Asaph

+1

Đúng, bạn đang ở bên phải –

1
SELECT contacts.name, COUNT(*) 
    FROM contacts, purchases 
    WHERE contacts.name = purchases.name 
GROUP BY purchases.key 
ORDER BY contacts.name 

Thay .name trong mệnh đề WHERE với phím bạn đang sử dụng để xác định hồ sơ.

+1

Việc tham gia bên ngoài sẽ được khuyến khích để bạn có thể bao gồm các liên hệ với số lần mua hàng bằng 0. – Asaph

+1

Ah, cảm ơn bạn – kz3

Các vấn đề liên quan