【问题标题】:How to make this simple MySQL join select?如何使这个简单的 MySQL 连接选择?
【发布时间】:2011-12-23 15:47:30
【问题描述】:

我有第一个表注册,该表包含:

uid (int)
email (varchar)
telephone (varchar)

看起来像这样

++++++++++++++++++++++++++++++++++++++++++++++++
+ uid   +  email             + telephone       +
++++++++++++++++++++++++++++++++++++++++++++++++
+ 1    +  david@gmail.com    + 333-111-5555    +
++++++++++++++++++++++++++++++++++++++++++++++++
+ 2    +  erick@gmail.com    + 333-222-5555    +
++++++++++++++++++++++++++++++++++++++++++++++++
+ 3    +  james@gmail.com    + 333-333-5555    +
++++++++++++++++++++++++++++++++++++++++++++++++
+ 4    +  svene@gmail.com    + 333-444-5555    +
++++++++++++++++++++++++++++++++++++++++++++++++
+ 5    +  simon@gmail.com    + 333-555-5555    +
++++++++++++++++++++++++++++++++++++++++++++++++
+ 6    +  peter@gmail.com    + 333-666-5555    +
++++++++++++++++++++++++++++++++++++++++++++++++
+ 7    +  mikka@gmail.com    + 333-777-5555    +
++++++++++++++++++++++++++++++++++++++++++++++++

我有第二张表referrers,该表包含以下列:

id (int)
uid0 (int)
uid1 (int)

第二个表保存自增的id,然后uid0是父用户id,uid1是referer的用户id

例如可以有这些值

+++++++++++++++++++++++
+ id   +  uid0 + uid1 +
+++++++++++++++++++++++
+ 1    +  2    +  3   +
+++++++++++++++++++++++
+ 2    +  2    +  5   +
+++++++++++++++++++++++  

我知道如何从 foreach 循环中的 registered 表中回显所有已注册的电子邮件和电话。

但是,我还需要加入并回显属于某个用户 (uid0) 的所有推荐人 (uid1) 电子邮件。

+++++++++++++++++++++++
+ id   +  uid0 + uid1 +
+++++++++++++++++++++++
+ 1    +  2    +  3   +
+++++++++++++++++++++++
+ 2    +  2    +  5   +
+++++++++++++++++++++++
+ 3    +  4    +  1   +
+++++++++++++++++++++++
+ 4    +  4    +  6   +
+++++++++++++++++++++++
+ 5    +  4    +  7   +
+++++++++++++++++++++++    

所以,最终的回显结果将如下所示:

email                  telephone               referers
erick@gmail.com        333-222-5555            james@gmail.com, simon@gmail.com
svene@gmail.com        333-444-5555            david@gmail.com, peter@gmail.com, mikka@gmail.com

如何执行这个“线程化”foreach 循环?

提前致谢。

【问题讨论】:

  • 只是几个风格点:虽然我不知道您的确切用例,但我想用户 X 将用户 Y 推荐给您的服务。所以,在命名方面,“referrer_from”和“referrer_to”怎么样 - 您代码库的后续开发人员会感谢您!此外,如果您将这两列设为复合主键(假设 from+to 是唯一的),那么您可以将 id 列删除到第二个表中。

标签: php mysql


【解决方案1】:

您可以尝试使用group concat; 进行子选择

类似:

select r.email, r.telephone from registered as r, 
(SELECT 
       GROUP_CONCAT(r.email)
       FROM registered
       GROUP uid1 where uid0 = r.uid)

【讨论】:

  • 嗯,这不起作用。我在你的 sql 中没有看到 referrers 表引用
  • 基本的inner join可以做我想做的,我终于弄明白了
  • @joshuabernstein - iner join 无法将字段中的数据连接到一个字符串中。 GROUP_CONCAT([DISTINCT] expr [,expr ...] [ORDER BY {unsigned_integer | col_name | expr} [ASC | DESC] [,col_name ...]] [SEPARATOR str_val])
猜你喜欢
  • 1970-01-01
  • 2010-09-27
  • 2019-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多