2013-01-03 83 views
0

我想加入2 MySQL表,但我無法設法幫助自己使用在線示例。MYSQL PHP添加表值作爲行

表countains 3行:registrant_id,field_id和field_value。

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

我想將這兩個表放在一起,以便可以使用row:field_value,就像dat_eb_registrants中的其他值一樣。

目前我正在使用以下方法,但由於查詢未連接,因此無法對錶中的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]; 
} 

末等等....

回答

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'

如果你需要加入一些更解釋相關,請參閱本很好的回答: https://stackoverflow.com/a/5874895/586859

當你運行這個,你可以正常循環你的結果,但是你的所有值都應該包含在一個點上。

+0

我的意思是表格的內容......我給出的id僅僅是整個表格的一部分...... – Laurent

+0

這就是爲什麼我在初始查詢之後放置了WHERE子句 - 只是爲了通知它將工作得很好如果您需要將其包含在特定實例中。 – burmat

+0

好吧,所以我試過,但它給出了一個錯誤說:'不能查詢:不是唯一的表/別名:'field_values''任何想法出了什麼問題? – Laurent

0

如何:

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

表格繼續,我的例子只是整個表格的一小部分,所以53和54是簡單的1232條記錄中的2個。 – Laurent

+0

無論哪種方式 - 這是一個如何加入和選擇它的子集的例子。 – ethrbunny

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

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; 

雖然這是一個雙重加入,這是相當可怕的。我相信

0

正如大家所說,INNER JOIN無疑是你」重溫之後,它看起來像一個雙重加入。

爲了加速您所做的任何結果,請確保您索引要加入的列。這可以將30秒的查詢改爲.3秒。