簡體   English   中英

如何使用一個查詢對多個表中的行進行計數

[英]How to count rows from multiple tables using one query

我的數據庫包含有關特定項目的信息。 每個項目都由多個部分組成,每個部分都有一個或多個照相館。 我想知道是否可以僅使用一個查詢來計算與任何給定項目關聯的項目部分,畫廊和照片的數量。 當前,系統中有1個項目,包含3個部分,5個畫廊和302張照片。

此查詢(感謝SO的許多幫助)可以很好地計算每個項目的零件數,目前為3:

// count number of parts per project
$conn = dbConnect('query');
$galNumb = "SELECT COUNT(*) FROM pj_parts WHERE pj_id = ?";
$stmt = $conn->prepare($galNumb);
$stmt->bind_param('i', $project);
$stmt->bind_result($galTotal);
$stmt->execute();
$stmt->store_result();
$stmt->fetch();

可以更改為不僅計算零件數(pj_part),而且還計算其各自表中的畫廊和照片的數量嗎? 我正在嘗試簡化查詢,並了解有關使代碼高效的更多信息。 任何幫助將由衷的感謝。

更新:

我不確定這里如何進行表結構格式化,但是這里是純文本格式:

pj_parts
pj_part_id (primary key)
pj_id (project number)
pj_part (part number within project)

pj_part_galleries
pj_gallery_id (primary key)
pj_id (project number)
pj_part (part number within project)
pj_gallery (gallery number)

pj_photos
pj_photo_id (primary key)
pj_id (project number)
pj_part (part number within project)
pj_gallery_number

我希望這會有所幫助,如果沒有幫助,請讓我知道如何重新格式化。

如果您使用UNION

SELECT 'pj_parts' as tablename, COUNT(*) as c 
    FROM pj_parts WHERE something=something
UNION 
SELECT 'pj_galleries' as tablename, COUNT(*) as c 
    FROM some_other_table WHERE something=something
UNION 
SELECT 'pj_photos' as tablename, COUNT(*) as c 
    FROM some_other_other_table WHERE something=something

你會得到這個

tablename         |   c
------------------+--------
pj_parts          |  3
pj_galleries      |  5
pj_photos         |  302

您可以迭代以填充數組或其他內容(問題未指定)

怎么樣:

SELECT 
COUNT(DISTINCT p.pj_part_id) AS parts,
COUNT(DISTINCT g.pj_gallery_id) AS galleries,
COUNT(DISTINCT ph.pj_photo_id) AS photos,
 FROM 
pj_parts p
LEFT JOIN pj_part_galleries g ON (g.pj_part = p.pj_part_id)
LEFT JOIN pj_part_photos ph ON (ph.pj_part = p.pj_part_id)
WHERE p.pj_id = ?

您必須添加正確的表/列名稱。

編輯:如果使用mysqli,則可以進行以下綁定:替換:

$stmt->bind_result($galTotal);

附:

$stmt->bind_result($partsTotal,$galleriesCount,$photosCount);

注意:在這里,我將$ galTotal更改為$ partsTotal。

Edit2:更新為使用列/表名稱。

猜測您的結構,但是這樣的事情?

SELECT 
    COUNT(DISTINCT p.part_id) parts ,
    COUNT(DISTINCT g.gal_id) galleries ,
    COUNT(DISTINCT ps.pic_id) photos
FROM pj_parts p
    LEFT JOIN {galleries} g on p.part_id = g.part_id
    LEFT JOIN {photos} ps on g.gal_id = ps.gal_id
WHERE p.pj_id = ?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM