【问题标题】:MYSQL PHP add table values as rowsMYSQL PHP 将表值添加为行
【发布时间】:2012-12-17 22:59:30
【问题描述】:

我正在尝试加入 2 个 MySQL 表,但我无法通过在线示例帮助自己。

dat_eb_field_values 表共有 3 行:registrant_id、field_id 和 field_value。

我的第二个表:dat_eb_registrants 包含普通行,例如 user_id、first_name、last_name 等。

我正在尝试将这 2 个表放在一起,以便可以像使用来自 dat_eb_registrants 的其他值一样使用 row: field_value。

目前我正在使用以下方法,但由于未连接查询,因此无法对表 dat_eb_field_values 中的 field_value 的输出进行排序。

$result = mysql_query("SELECT user_id,first_name,last_name,email FROM `dat_eb_registrants`") 
while ($row = mysql_fetch_row($result)) {

    $result1 = mysql_query("SELECT field_value FROM field_values WHERE (field_id = 53) AND (user_id = $row[0])"); $r1 = mysql_fetch_row($result1); echo $r1[0];
    echo $row[2];
    $result2 = mysql_query("SELECT field_value FROM dat_eb_field_values WHERE (field_id = 54) AND (user_id = $row[0])"); $r2 = mysql_fetch_row($result2); echo $r2[0];
}

以此类推……

【问题讨论】:

    标签: php mysql select join


    【解决方案1】:

    也许只使用连接?尝试以下查询:

    SELECT users.user_id, users.user_name, users.user_email, field_values.field_value 
    FROM users LEFT JOIN field_values ON users.user_id=field_values.user_id
    

    你也可以在其后面附加一个 WHERE 子句,例如:

    WHERE field_values.field_id='53'

    如果您需要更多关于 JOIN 的解释,请参阅这个很好的答案: https://stackoverflow.com/a/5874895/586859

    当你运行它时,你可以像往常一样遍历你的结果,但你的所有值都应该包含在一个位置。

    【讨论】:

    • 我的意思是桌子还在继续……我给的 id 只是整个桌子的几个……
    • 这就是为什么我将WHERE 子句放在初始查询之后的原因 - 只是为了告知如果您需要将它包含在特定实例中它会很好地工作。
    • 好的,所以我试过了,但它给出了一个错误提示:'Could not query: not unique table/alias: 'field_values'' 知道出了什么问题吗?
    • 也许这与您在原始问题中更改表的名称有关。确保在我提供的查询中更改表的名称并检查拼写。这个概念有效,如果您需要添加另一个连接(用于查询第三个表),只需使用相同的方法附加它并更新表名。
    • 好的,你可能刚刚挽救了我的一部分生命 :) 但我现在怎么能回应这些,因为以前我使用过 '$row[0], $row[1], ect.'对于users 中的数据和field_values 中的数据,我进行了新的查询。有没有办法让“$row[3]”数据继续使用来自field_values 的数据?谢谢。
    【解决方案2】:

    怎么样:

    select * from users join field_values using( user_id ) where field_id in (53,54);
    

    【讨论】:

    • 表格继续,我的例子只是整个表格的一小部分,所以 53 和 54 是 1232 条记录中的简单 2..
    • 无论哪种方式 - 这是一个如何加入和选择它的子集的示例。
    【解决方案3】:

    JOIN 可以在这里为您提供帮助:

    SELECT u.user_id,u.user_name,u.user_email,f.field_value FROM users u LEFT JOIN field_values f ON f.field_id=u.user_id

    这是假设 field_id 匹配 user_id

    【讨论】:

      【解决方案4】:

      我想你想要的是这样的

      select u.*, v1.field_value as field_53, v2.field_value as field_54 
      from users u 
      join values as v1 on v1.user_id = u.user_id AND v1.field_id = 53 
      join values as v2 on v2.user_id = u.user_id AND v2.field_id = 54;
      

      虽然这是一个双重连接,而且我相信这很可怕......

      【讨论】:

        【解决方案5】:

        正如大家所说,INNER JOIN 无疑是您所追求的,它看起来像一个双重连接。

        为了加快您想要的任何结果,请确保您为要加入的列编制索引。这可以将 30 秒的查询更改为 0.3 秒的查询。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-03-29
          • 1970-01-01
          • 1970-01-01
          • 2016-08-25
          • 1970-01-01
          • 2014-07-02
          相关资源
          最近更新 更多