0

我正在尝试加入 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.

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

$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];
}

以此类推结束……

4

5 回答 5

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

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

于 2013-01-03T15:05:17.433 回答
0

怎么样:

select * from users join field_values using( user_id ) where field_id in (53,54);
于 2013-01-03T15:02:31.453 回答
0

JOIN can help you here:

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

This is assuming that field_id matches user_id

于 2013-01-03T15:04:21.217 回答
0

我想你想要的是这样的

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;

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

于 2013-01-03T15:06:19.227 回答
0

正如每个人所说,这INNER JOIN无疑是你所追求的,它看起来像一个双重连接。

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

于 2013-01-03T15:43:38.487 回答