MySQL Query根据3个变量确定值

时间:2013-02-21 22:21:04

标签: php mysql sql database

我需要能够精确定位MySQL表中由两个变量定义的值。

在网站的前端,有一个接受各种领域的表格。对于这个例子,让我们关注这两个:

  1. 帐号

  2. 帐户名称

  3. 我开发了一个脚本,该脚本在输入后将使用ajax脚本检查“帐号”,如果找到匹配项,则会在用户选中该字段时显示“帐户名称”。

    困难在于从数据库表的格式中找到单个结果。例如:

    ”SELECT * FROM example_table WHERE name=’$accountnumber’”
    

    提供与帐号相同的所有值的列表,但不提供帐户名的任何记录。

    ”SELECT * FROM example_table WHERE name=’$accountname’”

    提供与帐户名称相同的所有值的列表,但不提供帐号的任何记录。

    $record值是$accountnumber$accountname之间唯一的共同点。

    总而言之,我需要帮助创建循环,首先可以使用$accountnumber值来查找与该数字相关联的$record值。其次,它将采用确定的$record值并将其与$accountname值匹配。每个唯一$accountnumber值只有一个$accountname$record值。


    更新:关于这个问题有好几条评论。为了提供更多背景知识,只有一个表格。可用的最佳鉴别器似乎是title值。以下是要更详细查看的表格摘要的链接:

    https://docs.google.com/file/d/0By2lFlhEzILjbE1uT1hkVURmczA/edit?usp=sharing

    因此,最终在此示例中,用户会输入246802,过滤掉的结果将为Fred’s Account

1 个答案:

答案 0 :(得分:1)

听起来像是在同一张桌子上?是否有任何鉴别者可以告诉您name是否包含accountnumberaccountname

在任何情况下,通过以下假设,你可以尝试一个丑陋的自我加入:

  1. 只有两条记录包含您想要的记录ID
  2. 这些是同一个表中的多个列,在不明确的列名称中包含不同的信息
  3. 没有更好的方法来区分记录类型
  4. 如果是这样,像这样的自我加入应该让你开始:

    SELECT t2.name as accountnumber from example_table as t1
    INNER JOIN example_table as t2 on t1.recordID=t2.recordID
    WHERE t1.name='$accountname'
    

    编辑注意 - 如果我的假设是正确的,如果这是你继承的数据,我觉得你应该改善它的结构。如果你是这样设计的,你可能想先考虑一下。

    编辑2

    你可能想在name列上放一个索引(这是我根据你的例子使用的鉴别器)。

    您的查询可能是这样的:

    SELECT t1.value as accountnumber,t2.value as accountName from example_table as t1
    INNER JOIN example_table as t2 on t1.record=t2.record
    WHERE t1.name='accountNumber' and t2.name='accountName'
    

    请参阅此SQL小提琴:http://www.sqlfiddle.com/#!2/97c2f/1