簡體   English   中英

php/mysql 正確合並 2 個具有相同列的表

[英]php/mysql Merge 2 tables with same Columns correctly

編輯:感謝 JoseCarlosPB 這里是解決方案:

SELECT
  (select count(DISTINCT userscount) AS duplicates from users1)
  +
  (select count(DISTINCT userscount) AS duplicates from users2) AS duplicates
FROM dual;

所以我有 2 個表和一個 mysql 語句,我想合並 2 個表,但兩者都有相同的列。我認為 PHP 代碼沒有什么可做的,我認為問題出在 mysql 語句中。

我的代碼有效(沒有錯誤),但它給出了意外的輸出。我只是想正確計算用戶數,這就是我的意思:table1 有 32 個用戶,table2 有 44 個用戶我認為輸出將是 76 個用戶,但它是 3244

PHP:

include 'conn00.php';
    $sql = "select DISTINCT userscount, count(DISTINCT userscount) AS duplicates from users1 UNION ALL
     select DISTINCT userscount, count(DISTINCT userscount) AS duplicates from users2";
    $result = $conn->query($sql);

    if ($result->num_rows > 0) {
        // output data of each row
        while($row = $result->fetch_assoc()) {
            echo $row["duplicates"];
        }
    } else {

    }

表格1:

users1 

32

表2:

users2 

44    

輸出:3244 我希望輸出是 76

如果解決方案在 mysql 中會更好 bcz 我有更多類似的 sql 語句,我想將解決方案應用於所有這些。 謝謝回答

我認為你可以這樣做,就像alistaircol說的

SELECT
  (select count(DISTINCT userscount) AS duplicates from users1)
  +
  (select count(DISTINCT userscount) AS duplicates from users2) AS duplicates
FROM dual;

請檢查您需要合並兩個具有相同列名稱的 MYSQL 表的文章

與此相比,您需要將計數移到 UNION 之外才能按預期工作

也許你可以為你的查詢嘗試這樣的事情:

SELECT
  (select count(DISTINCT userscount) AS duplicates from users1 group by usercount)
  +
  (select count(DISTINCT userscount) AS duplicates from users2 group by usercount)
FROM dual;

DUAL 純粹是為了方便那些要求所有 SELECT 語句都應該有 FROM 和其他可能的子句的人。 MySQL 可能會忽略這些子句。 如果沒有引用表,MySQL 不需要 FROM DUAL。

關於DUAL更多信息: https : //dev.mysql.com/doc/refman/8.0/en/select.html

也許您可以將代碼查詢更改為此以求和整個計數值

      include 'conn00.php';
    $sql = "select  sum(i) as duplicates from (
    select count(DISTINCT  userscount) as i from users1 union all
    select count(DISTINCT  userscount) as i from users2 
    ) x";
    $result = $conn->query($sql);

    if ($result->num_rows > 0) {
        // output data of each row
        while($row = $result->fetch_assoc()) {
            echo $row["duplicates"];
        }
    } else {

    }

我不確定查詢的語義是否正確,但語法必須是這樣的(WHERE 子句在 JOIN 和 ON 之后):

 SELECT users1.text1, users2.name,users2.email, 
 users1.username
 FROM users1 
 INNER JOIN users2 
 ON users1.text1=users2.text1
 WHERE users1.username = $_SESSION[username]

SELECT * from ( (select count(DISTINCT userscount) AS duplicates from users1) union all (select count(DISTINCT userscount) AS duplicates from users2) ) as duplicates

您也可以通過這種方式合並。希望對您有所幫助

暫無
暫無

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

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