【问题标题】:How to return unknown value using known value from same column in SQL如何使用 SQL 中同一列的已知值返回未知值
【发布时间】:2014-06-26 03:54:38
【问题描述】:

我有一个表单,可以提交电子邮件地址、姓名和图片以及更多字段。所有提交都存储在名为 sendValue 的同一列中,但每个表单字段的唯一名称在 formField 列中。

第一次提交需要所有字段,但返回用户只需要输入他们的电子邮件,然后表单只返回图像上传,因为它在数据库中找到了电子邮件地址。

我想使用 fieldname 'email' 的已知值从 fieldname 'name' 中返回匹配的 'name' 值,并打印到仅上传图片的页面。

这就是没有正确逻辑的情况,我尝试了许多其他格式和 SQL 语法

SELECT sentValue AS name FROM tbl_submission 
WHERE formID='2' AND formField='name' 
AND formField='email' AND sentValue='smit@home.com'
return $query;

实现我的目标的正确 SQL 查询是什么?

@Matt 这是结构
tbl_submission
formID - 因为多个表单将发布到表格并且每个表单都有一个 ID
formSubsID - 每个字段的数据在数据库条目上获得一个 ID
formField - 存储每个字段的唯一名称
sentValue - 存储用户输入的每个字段的值

|formID|formSubsID|formField|sentValue|
|  1   |   1      | name    | mike    |
|  1   |   1      | email   |mi@hom.us|
|  1   |   1      | image   |img.jpg  |
|  2   |   34     | image   |new.jpg  |        

用户看到的第一页有一个带有单个电子邮件文本字段的表单。该条目未存储在 DB 中,但在提交时查询 DB 中的 formID 1 以查看输入的电子邮件是否已存在。如果不是,则返回显示所有必填字段的 ID 为 1 的表单。

如果查询返回 true 表明电子邮件在数据库中,但返回 ID 为 2 的不同表单,该表单仅显示单个图像上传字段,并且图像存储在相同的 sentValue 列中。在此页面上,我希望打印与找到的电子邮件相关联的名称。

【问题讨论】:

  • ... WHERE email='user_input'
  • 您的意思是:**您只想拥有一列并在其上添加一些字段?例如,在 MySQL 的一列中添加电子邮件、姓名和地址** 对吗?
  • 我有点困惑,所有值都保存在一个列中但表单字段保存在其他列中?您能否包括您的数据的理想状态?
  • @Dagon 这是我在这里发帖之前尝试过的众多方法之一
  • @Matt 在我的帖子中查看编辑

标签: php mysql sql forms


【解决方案1】:

如果我理解正确,您需要找到与电子邮件“mi@hom.us”具有相同 formSubsID 的可能名称。您可以使用简单的 LEFT JOIN 来完成此操作,因为该名称可能不存在;

SELECT name.sentValue AS name 
FROM tbl_submission email
LEFT JOIN tbl_submission name 
  ON email.formSubsID = name.formSubsID AND name.formfield = 'name'
WHERE email.formfield = 'email' AND email.sentValue = 'mi@hom.us'

这将返回名称,如果不存在名称,则返回 NULL。如果名称不存在,而您根本不希望得到任何结果,则只需将 LEFT JOIN 更改为常规 JOIN。

An SQLfiddle to test with.

【讨论】:

  • 谢谢,我试过了,但它只返回列中的名字,而不是与电子邮件关联的名字
  • @KumarSara 将查询更改为使用 formSubsID 作为匹配条件,并更改 SQLfiddle 以匹配您的示例数据。
  • 更改确实完美。您真是个 SQL 天才,非常感谢您的指导。
猜你喜欢
  • 2022-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-14
  • 1970-01-01
相关资源
最近更新 更多