【问题标题】:MySQL: Pulling and presenting information from multiple tables, based on user inputMySQL:根据用户输入从多个表中提取和呈现信息
【发布时间】:2015-03-23 14:47:43
【问题描述】:

我在 SQL 编程方面有点不够深入,但是在搜索了我的问题的解决方案后,我没有找到任何相关的答案,因此我的问题在这里:

使用 MySQL,我有一个名为 newsletter_subscriber 的表。此表仅包含电子邮件地址列表 (subscriber_email),每行电子邮件地址都有一个唯一 ID (subscriber_ID),每行 ID 递增 1。

我想要完成的是能够输入“发件人”ID 和“收件人”ID(例如,从 672 到 835),并且对于其中的每一个,都有查询表 sales_flat_order_address 和 sales_flat_order_address相应的电子邮件地址返回客户的名字 (firstname) 和姓氏 (lastname) 以及电话号码 (telephone)。

这三个表(newsletter_subscriber、表 sales_flat_order_address 和 sales_flat_order_address)的唯一共同点是电子邮件地址。如果在 sales_flat_order_address 和 sales_flat_order_address 中找到匹配项,则应放弃对该电子邮件地址的进一步搜索,这样我们就不会得到同一电子邮件地址的多个结果(两个表可能包含相同的电子邮件地址,每个表甚至可能包含电子邮件地址多次,在所有情况下都会显示名字、姓氏和电话的完整信息)。

最终结果应该是这样的(下面是我的 cmets):

1:  2:                      3:          4:          5:
672 email1@example.com      Firstname1  Lastname1   Telephone1
673 email2@example.com      Firstname2  Lastname2   Telephone2
674 email3@example.com      Firstname3  Lastname3   Telephone3
675 email4@example.com      Firstname4  Lastname4   Telephone4
676 email5@example.com      Firstname5  Lastname5   Telephone5
..  ..                      ..  ..  ..
835 email174@example.com    Firstname6  Lastname6   Telephone6

*1:第 1 列,显示从表 newsletter_subscriber 中手动输入的subscriber_id 列增加的 ID

*2:第 2 列,显示表 newsletter_subscriber 中的相应字段 subscriber_email

*3:第 3 列,显示表 sales_flat_order_address 或 sales_flat_order_address 中的相应字段 firstname,以对应第 2 列中的相应电子邮件地址

*4:第 4 列,显示表 sales_flat_order_address 或 sales_flat_order_address 中的相应字段姓氏,以对应第 2 列中的相应电子邮件地址

*5:第 5 列,显示表 sales_flat_order_address 或 sales_flat_order_address 中的相应字段电话,以对应第 2 列中的相应电子邮件地址

谁能提供代码示例?

【问题讨论】:

  • 手动是什么意思?手动在哪里?
  • 糟糕,我相信可以提示用户输入。想一想,这对于普通的 SQL 编程来说可能是不可能的,尽管我的 SQL 数据库处理程序 (Navicat) 确实提供了这个选项。也许这是 Navicat 特有的功能?

标签: mysql database


【解决方案1】:

你可以试试:

select ns.email, a.firstname, a.lastname, a.telephone from sales_flat_order_address a inner join newsletter_subscriber ns on
a.subscriber_ID = ns.ID

鉴于您的表具有以下字段,这应该可以工作: sales_flat_order_address:电子邮件、名字、姓氏、电话、订阅者 ID newsletter_subscriber:ID、电子邮件

【讨论】:

  • 感谢您的贡献,但对我(作为新手)来说,您似乎依赖于两个表 newsletter_subscriber 和 sales_flat_order_address 中存在的相同 ID?不是这种情况。唯一的共同点是电子邮件地址。
【解决方案2】:

试试这个,它会起作用的:

SELECT t1.`subscriber_email`, t2.`firstname`, t2.`lastname`, t2.`telephone` from `newsletter_subscriber` t1 JOIN `sales_flat_order_address` t2 on
t1.`subscriber_email` = t2.`email`

【讨论】:

  • 谢谢罗希特。这解决了我遇到的核心“问题”,并且使用您的代码作为基础,我能够扩展它来做我需要的事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-19
相关资源
最近更新 更多