簡體   English   中英

對於一個表的每個值,從另一個表中獲取並顯示相應值的計數

[英]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 為每個...也嘗試過,但是我不確定什么是正確的回聲...總而言之,我完全迷失在這里。 請幫忙。 謝謝你。

所以想象一下這分兩步:

  1. control表中獲取每個art_id的計數
  2. 使用您的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;

SQL 小提琴演示

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.

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