【问题标题】:SQL JOIN: How to echo values of a column of table A with same name as a column of table B?SQL JOIN:如何回显表 A 的列的值与表 B 的列同名?
【发布时间】:2020-01-29 20:59:35
【问题描述】:

我有两个名为 accounts

的 MySQL 表
id username role
1  pete101  2
2  JohnnyA  1
3  Anno65   1
4  tom      1
5  koala3   2

名称为events

id date     accountID
1  02-04-20 3
2  10-04-20 5
3  07-04-20 4
4  10-04-20 2
5  10-04-20 1

现在我想在 HTML 表格中显示来自角色“2”的帐户中日期为“10-04-20”的所有事件。 我使用这个查询:"SELECT * FROM events JOIN accounts ON events.accountID = accounts.id WHERE events.date = '10-04-20' AND accounts.role = '2'"

while($row = mysqli_fetch_array($result)){   
    echo "<tr><td>" . $row['id'] . "</td><td>" . $row['date'] . "</td><td>" . $row['username'] . "</td><td>" . $row['accountID'] . "</td><br>"; 
}

这个查询(和 PHP)的结果是下一个:

id  date     username accountID
5  10-04-20  koala3   5
1  10-04-20  pete101  1

它显示了 accounts 表 id 的两倍,但我想要下一个回显:

id  date     username accountID
2  10-04-20  koala3   5
5  10-04-20  pete101  1

所以第一列是events表的id,最后一列(accountID)是accounts表的id

我该怎么做才能解决这个问题?

提前非常感谢!

【问题讨论】:

  • 而不是 row['id']... 尝试 row[0], row[1]...
  • 谢谢,$row[0] 成功了。非常感谢。

标签: mysql join echo


【解决方案1】:

既然它有助于评论,不妨让它成为一个答案。将其从$row['colname']; 更改为$row 中的实际位置

更改原始查询:

while($row = mysqli_fetch_array($result)){   
    echo "<tr><td>" . $row['id'] . "</td><td>" . $row['date'] . "</td><td>" . $row['username'] . "</td><td>" . $row['accountID'] . "</td><br>"; 
}

到这里:

while($row = mysqli_fetch_array($result)){   
    echo "<tr><td>" . $row[0] . "</td><td>" . $row[1] . "</td><td>" . $row[2] . "</td><td>" . $row[3] . "</td><br>"; 
}

【讨论】:

    【解决方案2】:

    试试

    CREATE TABLE accounts
        (`id` int, `username` varchar(7), `role` int)
    ;
        
    INSERT INTO accounts
        (`id`, `username`, `role`)
    VALUES
        (1, 'pete101', 2),
        (2, 'JohnnyA', 1),
        (3, 'Anno65', 1),
        (4, 'tom', 1),
        (5, 'koala3', 2)
    ;
    
    ✓ ✓
    CREATE TABLE events
        (`id` int,  `date` date, `accountID` varchar(10))
    ;
        
    INSERT INTO events
        (`id`, `date`, `accountID`)
    VALUES
        (1, '02-04-20', 3),
        (2, '10-04-20', 5),
        (3, '07-04-20', 4),
        (4, '10-04-20', 2),
        (5, '10-04-20', 1)
    ;
    
    ✓ ✓
    SELECT 
    e.id,a.username,e.`date`, e.accountID
    FROM events e JOIN accounts a ON e.accountID = a.id 
     WHERE e.date = '10-04-20' AND a.role = '2'
    Order BY e.id
    
    编号 |用户名 |日期 |帐户ID -: | :------- | :--------- | :-------- 2 |考拉3 | 2010-04-20 | 5 5 |皮特101 | 2010-04-20 | 1

    db小提琴here

    【讨论】:

    • 感谢您的时间和帮助,但是在 PHP 中要回显什么?
    • 你可以保留你的php代码,剩下的交给mysql select
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-26
    • 1970-01-01
    相关资源
    最近更新 更多