php - MySQL连接4个表而不重复

标签 php mysql

我有 4 个表,我想使用一个查询从这些表中选择信息。

我有一个表名

tbl_marketing

db_maid db_client db_status db_process
4        test      done     ddd

tbl_meeting

db_meetingid db_meetingsubject db_mid
1               test            4

tbl_phonecall

db_phid db_subject db_mid
1       ggg          4
2       fff          4

tbl_email

db_eid  db_email db_mid

1        xxx       4

备注:这是我的 4 个表格的示例。我的表包含更多列 db_midtbl_marketing的id

我想选择所有信息而不重复

我使用此查询:

select
      marketing.*,
 meeting.db_meetingid,meeting.db_meetingsubject,meeting.db_sd,meeting.db_dd,meeting.db_duration as meetingDuration,meeting.db_place,meeting.db_mom,meeting.db_momattache,meeting.db_status as meetingStatus,meeting.db_nextmeeting,meeting.db_lastmeeting,meeting.db_attendees,meeting.db_note as meetingNote,meeting.db_mid,
      phonecall.db_phid,phonecall.db_subject as phoneSubject,phonecall.db_desc as phoneDesc,phonecall.db_nextdate,phonecall.db_doc,phonecall.db_duration as phoneDuration,phonecall.db_phstatus,phonecall.db_pnote,phonecall.db_client as phoneClient,phonecall.db_crf,phonecall.db_callto,phonecall.db_phone as phonecallPhone,phonecall.db_logs as phoneLogs,phonecall.db_mid,phonecall.db_dateedit as phoneEdit,phonecall.db_phdate,
   email.db_eid,email.db_edate,email.db_esubject,email.db_edesc,email.db_erf,email.db_emailto,email.db_email as eEmail,email.db_dos,email.db_dor,email.db_estatus,email.db_logs as eLogs,email.db_note as eNote,
   location.db_location as location,
   location.db_lid,
   company.db_company as com,
   company.db_coid,
   subcompany.db_subid,
   subcompany.db_subcompany as sub,
   user.db_uid,
   concat(user.db_fname,' ' ,user.db_lname) as tr,
   subj.db_subjid,
   subj.db_subject as s
      from tbl_marketing as marketing
      left join tbl_location as location
      on
      marketing.db_location=location.db_lid
      left join tbl_meeting as meeting
      on
      marketing.db_maid=meeting.db_mid
      left join tbl_phonecall as phonecall
      on
      marketing.db_maid=phonecall.db_mid
      left join tbl_email as email
      on
      marketing.db_maid=email.db_mid
      left join tbl_company as company
      on
      marketing.db_companyname=company.db_coid
      left join tbl_subcompany as subcompany
      on
      marketing.db_subcompany=subcompany.db_subid
      left join tbl_user as user
      on
      marketing.db_transfered=user.db_uid
      left join tbl_subject as subj
      on
      phonecall.db_subject=subj.db_subjid
      where
      marketing.db_maid='$read'
      and
      meeting.db_mid='$read'
      and
      email.db_mid='$read'
      and
      phonecall.db_mid='$read'

我使用此查询来选择信息,但当我有 2 行时,db_mid 与示例中的 tbl_phonecall 相同,则信息将重复,如下所示:

餐 table 营销

1 测试 4

1 测试 4

table 上电话

1 格格 4

2 fff 4

table 上 session

1 测试 4

1 测试 4

表格电子邮件

1 xxx 4

1 xxx 4

如上所示,所有表格都有重复值,没有电话调用,因为他有 2 行,我想显示所有信息,而不需要重复

如果我使用 group by mid,我不会收到 tbl_phonecall 中的第二个信息

$rows=array();
while($rows=mysqli_fetch_array($sql)){
$row[]=$rows;}
<table>
foreach($rows as row){
<tr>
<td><?php echo $row['phID'];?></td>
</tr>
} 
</table>

输出

# subject mid

1  test   4

2  ggg    4

不是这样的

1,2 测试,ggg 4,4

最佳答案

如果电话表中只有重复项,则以下操作应该有效。如果其他左连接表可以有重复项,只需根据需要添加 GROUP_CONCAT。

select
    marketing.*,
    meeting.db_meetingid,
    meeting.db_meetingsubject,
    meeting.db_sd,
    meeting.db_dd,
    meeting.db_duration as meetingDuration,
    meeting.db_place,
    meeting.db_mom,
    meeting.db_momattache,
    meeting.db_status as meetingStatus,
    meeting.db_nextmeeting,
    meeting.db_lastmeeting,
    meeting.db_attendees,
    meeting.db_note as meetingNote,
    meeting.db_mid,
    GROUP_CONCAT(phonecall.db_phid) as phID,
    GROUP_CONCAT(phonecall.db_subject) as phoneSubject,
    GROUP_CONCAT(phonecall.db_desc) as phoneDesc,
    GROUP_CONCAT(phonecall.db_nextdate) as phNextDate,
    GROUP_CONCAT(phonecall.db_doc) as phDoc,
    GROUP_CONCAT(phonecall.db_duration) as phoneDuration,
    GROUP_CONCAT(phonecall.db_phstatus) as phStatus,
    GROUP_CONCAT(phonecall.db_pnote) as phPNote,
    GROUP_CONCAT(phonecall.db_client) as phoneClient,
    GROUP_CONCAT(phonecall.db_crf) as phCrf,
    GROUP_CONCAT(phonecall.db_callto) as phCallTo,
    GROUP_CONCAT(phonecall.db_phone) as phonecallPhone,
    GROUP_CONCAT(phonecall.db_logs) as phoneLogs,
    GROUP_CONCAT(phonecall.db_mid) as phMid,
    GROUP_CONCAT(phonecall.db_dateedit) as phoneEdit,
    GROUP_CONCAT(phonecall.db_phdate) as phdate,
    email.db_eid,
    email.db_edate,
    email.db_esubject,
    email.db_edesc,
    email.db_erf,
    email.db_emailto,
    email.db_email as eEmail,
    email.db_dos,
    email.db_dor,
    email.db_estatus,
    email.db_logs as eLogs,
    email.db_note as eNote,
    location.db_location as location,
    location.db_lid,
    company.db_company as com,
    company.db_coid,
    subcompany.db_subid,
    subcompany.db_subcompany as sub,
    user.db_uid,
    concat(user.db_fname,' ' ,user.db_lname) as tr,
    subj.db_subjid,
    subj.db_subject as s
from tbl_marketing as marketing
left join tbl_location as location
    on marketing.db_location=location.db_lid
left join tbl_meeting as meeting
    on marketing.db_maid=meeting.db_mid
left join tbl_phonecall as phonecall
    on marketing.db_maid=phonecall.db_mid
left join tbl_email as email
    on marketing.db_maid=email.db_mid
left join tbl_company as company
    on marketing.db_companyname=company.db_coid
left join tbl_subcompany as subcompany
    on marketing.db_subcompany=subcompany.db_subid
left join tbl_user as user
    on marketing.db_transfered=user.db_uid
left join tbl_subject as subj
    on phonecall.db_subject=subj.db_subjid
where marketing.db_maid='$read' and
    meeting.db_mid='$read' and
    email.db_mid='$read' and
    phonecall.db_mid='$read'
GROUP BY meeting.db_mid

关于php - MySQL连接4个表而不重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43909696/

相关文章:

php - 分页链接无效/页面/2 - 未找到 - Wordpress

mysql - 修改MySQL索引计数

没有主键但有外键的Mysql表

php - 如何将 mysql 结果回显到文本字段

php - 在 PHP 中跨页面 View 存储临时数据的最佳方法是什么?

php - 如何检查字符串在 PHP 中是否为 base64 有效

php - Zend Framework 特定模块中操作的 URL

mysql - MySQL 错误代码 1062 与 1022 的差异

mysql - Hibernate 按可能为空的字段排序

mysql - 在有序选择中选择前 3 行