php - 从 3 个 sql 表收集数据以创建单个结果

标签 php mysql

想知道是否有人可以帮助解决以下问题。

我有三个表


表 1,商店:

sID | sName

表 2,客户:

cID | cFName | cLName

表 3,交易:

tID | cID | tInvoiceNo | sID | tPaymentType | tTotal

表 3 中的示例交易是

1 | 001 | 1023 | S01 | CASH       | 20

2 | 001 |  -   | 002 | FRIENDGIFT | 10

第一行是客户 001(即 bob)和商店 S01(即 toysRus)之间的实际交易,并且 bob 以现金支付($20)。

第二行是 001 (bob) 送给客户 002 (jim) 10 美元的礼物。

问题

这一切都很好,但我试图获得的是一个 SQL 语句,它不仅打印出像 001、002 和 S01 这样的 ID,而且还打印出相应的名称......作为 ID 对用户来说没有任何意义。

例如,对过去 5 笔交易的 sql 查询应该给我这样的输出

1 | 001 | bob | smith | 1023 | S01 | Toys R us | CASH | 20

2 | 001 | bob | smith |  -   | 002 | jane | black | FRIENDGIFT | 10

条件

除了支付类型 FRIENDGIFT 之外的所有内容都将始终是表 1 (SHOP) 中的 ID...您可以在 SQL 中使用 IF 语句吗?也许某种加入?

或者是不可能在单个查询中完成,需要拆分成 2 个? ...一个是获取过去的交易,一个是根据 tPaymentType 获取每个 ID 的名称(我使用 php 通过 mysql 获取结果,所以两个查询不会有问题,只是我想处理尽可能少的查询可能)

我希望我没有让任何人感到困惑:D

提前致谢!


解决方案

非常感谢 mario,这是生成的 sql 查询。

SELECT *
  FROM Transactions
  LEFT JOIN Customer USING (cID)
  LEFT JOIN Shop USING (sID)
  LEFT JOIN Customer c ON c.cID = sID
ORDER BY tID DESC
LIMIT 5

最佳答案

确实有一种简单的方法可以让一个查询从多个表中累积数据。

SELECT *
  FROM Transactions
  LEFT JOIN Customer USING (cID)
  LEFT JOIN Shop USING (sID)
ORDER BY tID DESC
LIMIT 5

如果要连接的表中的列名相同,则可以使用更简单的 USING 条件。但是还有 ON 子句允许其他条件(但是需要表别名)。
参见 http://dev.mysql.com/doc/refman/5.1/en/join.html

关于php - 从 3 个 sql 表收集数据以创建单个结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5770254/

相关文章:

mysql - 如何在这个sql表中找到所有员工访问过的位置?

java - 在 java(Eclipse) 中接收多个 JSON 对象(数组)

php - PHP/MySQL 插入问题

php - 如何使用 hasMany 关系和 laravel 中的 hasMany 获取数据?

mysql - Doctrine2 - 特殊字符的奇怪行为

mysql - 在 MEGA 上同步 MAMP MySQL 数据库

php - Mysql,查询成功,但没有结果输入DB

java - 使用 Guice 注入(inject)时如何在 Java 中正确处理长期存在的 MySQL 连接?

php - 在 WooCommerce 快速订单预览窗口的新列中显示产品缩略图

php - MySQL在现有数据之后向行添加数据