[英]Count number of family members from one table for each rows in another table called house?
[英]for each value of one table get and display count number of coresponding values from another table
不幸的是,我必須在 mysql/php 中執行此操作。 我找了三天,大約有 10.000 個這樣的解釋,但沒有(我重復沒有)對我有用。 我都試過了。 我想問一下,抱歉。
我有兩個表 - 文章和控件。
table "articles"
------------------
art_id | name |
------------------
1 | aaa |
2 | bbb |
3 | ccc |
4 | ddd |
table "control"
--------------------------------------------
con_id | art_id | data |
--------------------------------------------
1 | 1 | something-a |
2 | 2 | something-b |
3 | 1 | something-a |
4 | 2 | something-c |
5 | 3 | something-f |
art_id 存在於兩個表中。 現在我想要什么 - 查詢: "select * from articles order by art_id ASC"
顯示在表中,還有一個單元格顯示表 CONTROL 中每個 art_id 的計數......所以我嘗試了 join、left join、inner加入 - 我得到錯誤......我也嘗試過每個只得到一個結果(例如,所有東西都得到 2 個)......這是半正確的,但它顯示了正確結果的數組,它甚至沒有加入!!! :
$query = "SELECT art_id, count(*) as counting
FROM control GROUP BY art_id ORDER BY con_id ASC";
$result = mysql_query($query);
while($row=mysql_fetch_array($result)) {
echo $row['counting'];
}
這顯示 221 -
-------------------------------------------------
art_id | name | count (this one from control) |
-------------------------------------------------
1 | aaa | 221 |
2 | bbb | 221 |
3 | ccc | 221 |
它應該是:
for art_id(value1)=2,
for art_id(2)=2,
for art_id(3)=1
它應該很簡單 - 就像在查詢中顯示的 CONTROL 表中的值計數關於“文章”表......
表格文章頁面查詢結果應該是: "select * from articles order by art_id ASC"
-------------------------------------------------
art_id | name | count (this one from control) |
-------------------------------------------------
1 | aaa | 2 |
2 | bbb | 2 |
3 | ccc | 1 |
所以也許我應該使用 JOIN 或 join plus 為每個...也嘗試過,但是我不確定什么是正確的回聲...總而言之,我完全迷失在這里。 請幫忙。 謝謝你。
所以想象一下這分兩步:
control
表中獲取每個art_id
的計數articles
表,從步驟 1 中獲取計數這會給你一個看起來像這樣的查詢:
SELECT a.art_id, a.name, b.control_count
FROM articles a
INNER JOIN
(
SELECT art_id, COUNT(*) AS control_count
FROM control
GROUP BY art_id
) b
ON a.art_id = b.art_id;
這會給你你正在尋找的結果。
但是,您可以一次性完成所有操作,而不是使用子查詢:
SELECT a.art_id, a.name, COUNT(b.art_id) AS control_count
FROM articles a
INNER JOIN control b
ON a.art_id = b.art_id
GROUP BY a.art_id, a.name;
SELECT *, (SELECT COUNT(control.con_id) FROM control WHERE control.art_id = articles.art_id) AS count_from_con FROM articles ORDER BY art_id DESC;
如果我正確理解您的問題,則此查詢應該可以解決問題。
編輯:創建了您所描述的表,並且可以正常工作。
SELECT * FROM articles;
+--------+------+
| art_id | name |
+--------+------+
| 1 | aaa |
| 2 | bbb |
| 3 | ccc |
| 4 | ddd |
+--------+------+
4 rows in set (0.00 sec)
SELECT * FROM control;
+--------+--------+------+
| con_id | art_id | data |
+--------+--------+------+
| 1 | 1 | NULL |
| 2 | 2 | NULL |
| 3 | 1 | NULL |
| 4 | 2 | NULL |
| 5 | 3 | NULL |
+--------+--------+------+
5 rows in set (0.00 sec)
SELECT *, (SELECT COUNT(control.con_id) FROM control WHERE control.art_id = articles.art_id) AS count_from_con FROM articles ORDER BY art_id ASC;
+--------+------+----------------+
| art_id | name | count_from_con |
+--------+------+----------------+
| 1 | aaa | 2 |
| 2 | bbb | 2 |
| 3 | ccc | 1 |
| 4 | ddd | 0 |
+--------+------+----------------+
你還沒有完全解釋你想用打印完成什么,但這里有一個 PHP 例子:(使用PDO
而不是mysql_
)
$pdo = new PDO(); // Make your connection here
$stm = $pdo->query('SELECT *, (SELECT COUNT(control.con_id) FROM control WHERE control.art_id = articles.art_id) AS count_from_con FROM articles ORDER BY art_id ASC');
while( $row = $stm->fetch(PDO::FETCH_ASSOC) )
{
echo "Article with id: ".$row['art_id']. " has " .$row['count_from_con'].' connected rows in control.';
}
或者使用 mysql_ 擴展名:
$result = mysql_query('SELECT *, (SELECT COUNT(control.con_id) FROM control WHERE control.art_id = articles.art_id) AS count_from_con FROM articles ORDER BY art_id ASC');
while( $row = mysql_fetch_assoc($result) )
{
echo "Article with id: ".$row['art_id']. " has " .$row['count_from_con'].' connected rows in control.';
}
這應該是足夠的示例來幫助您完成所需的工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.