0

2つのMySQLテーブルを結合しようとしていますが、オンラインで例を使用して自分自身を助けることができません。

テーブルdat_eb_field_valuesは、registrant_id、field_id、field_valueの3行をカウントします。

2番目のテーブル:dat_eb_registrantsuser_id、first_name、last_nameなどの通常の行が含まれています。

これらの2つのテーブルをまとめて、行:field_valueを。の他の値と同じように使用できるようにしようとしていますdat_eb_registrants

現在、次の方法を使用していますが、クエリが接続されていないため、テーブルの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

これを実行すると、通常どおり結果をループできますが、すべての値が1つの場所に含まれている必要があります。

于 2013-01-03T15:05:17.433 に答える
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

どうですか:

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

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

于 2013-01-03T15:04:21.217 に答える
0

誰もが言っているように、それINNER JOINは間違いなくあなたが求めているものであり、二重結合のように見えます。

結果をスピードアップするには、結合する列にインデックスを付けるようにしてください。これにより、30秒のクエリを0.3秒のクエリに変更できます。

于 2013-01-03T15:43:38.487 に答える