php - MySQL 从一个表中选择行,并在第二个表中选择多行

标签 php mysql database

我有一个表包含“客户”信息,另一个表包含每个客户的“付款”信息。

简化的客户端表

client_id | client_name    | client_status
----------+----------------+--------------
1         | John St. Peter | In Arrears
2         | Peter St. John | Up-to-date

简化的付款表

payment_id | client_id | payment_date | payment_amount
-----------+-----------+--------------+---------------
1          | 1         | 2017-12-12   | 123.45
2          | 2         | 2017-12-15   | 234.56
3          | 1         | 2017-12-17   | 23.45
4          | 1         | 2017-12-21   | 54.32
5          | 2         | 2017-12-23   | 34.56

对于上述两个表,我想生成一个带有单个查询的表,其中包含所有相关信息以生成一个搜索网格,我可以在其中按两个表中的任何一个列进行过滤,即从“client”表中按“client_status”过滤,或从“payments”表中按“client_id”过滤。

payment_id | client_id | client_name    | client_status | payment_date | payment_amount
-----------+-----------+----------------+---------------+--------------+---------------
1          | 1         | John St. Peter | In Arrears    | 2017-12-12   | 123.45
2          | 2         | Peter St. John | Up-to-date    | 2017-12-15   | 234.56
3          | 1         | John St. Peter | In Arrears    | 2017-12-17   | 23.45
4          | 1         | John St. Peter | In Arrears    | 2017-12-21   | 54.32
5          | 2         | Peter St. John | Up-to-date    | 2017-12-23   | 34.56

所以 - 本质上,我希望在客户表中“重复记录”多次,以方便搜索。我正在使用预制网格工具(DataTables),该工具在整个系统中使用开发人员制作的自定义函数来生成网格(所以我不想弄乱该函数,以免破坏系统的其余部分),因此通过单个查询来获取该数据听起来是更实用的方法。我还为每一行提供了一个“编辑”功能,它将编辑“客户”表,并在“付款”表的编辑屏幕中放置一个选项卡式结构,该结构目前可以很好地处理两个查询(一个用于客户,一位获得该客户所有付款的人)。

我尝试过 UNION 以及各种 JOIN 语句(可能不正确......),但要么出现语法错误,要么每个“客户端”行只有一个结果,这意味着它不会在过滤器中出现。

如果这是一个重复的问题,我深表歉意 - 我已经搜索过,但找不到适合我的答案。

最佳答案

这里是一个连接...

select *
from clientsTable c,
     paymentsTable p
where c.client_id = p.client_id
order by p.payment_id;

这应该给你一切。

编辑:对于空的...没有客户的付款...

select *
from clientsTable c,
     paymentsTable p
where c.client_id = p.client_id 
   or p.client_id = null
order by p.payment_id;

关于php - MySQL 从一个表中选择行,并在第二个表中选择多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47995917/

相关文章:

php - 使用登录页面输入的电子邮件 ID 更新表单

php - 如何在 MySQL 中按日期获取最新值?

php - 关系差异

javascript - SpreadSheetApp 使用 JS 将值附加到特定单元格

database - Erlang 中的文本压缩

php - 比较 SQL 语句 if else 样式

PHP PDO try catch block 没有捕获

php - mysql 长时间查询

mysql - SQL LEFT JOIN OR 条件的更好方法

mysql - 如果列名/字段名存在于 mySQL 的表中,则搜索数据库