2013-10-04 22 views
0

看起來像一個蛋糕走路,因爲共同列的東西,但我看了,我看了,無法找到答案的任何地方。人們可能會嘗試做類似的事情,但每個人總是需要它與我需要的稍有不同。反正這裏去...我如何從兩個表中的多列中選擇數據,其中有一個共同列?

工作表

+----+--------+----+----+----+ 
| id | userid | i1 | i2 | i3 | 
+----+--------+----+----+----+ 
| 1 | 1 | a | k | t | 
| 2 | 1 | b | l | u | 
| 3 | 1 | c | m | v | 
| 4 | 2 | d | n | w | 
| 5 | 2 | f | o | x | 
| 6 | 2 | g | p | y | 
| 7 | 3 | h | q | z | 
| 8 | 3 | i | r | a | 
| 9 | 4 | j | s | b | 
+----+--------+----+----+----+ 

USER_TABLE表

+--------+----+----+----+ 
| userid | fn | ln | i4 | 
+--------+----+----+----+ 
| 1 | a | b | w | 
| 2 | c | d | x | 
| 3 | e | f | y | 
| 4 | g | h | z | 
+--------+----+----+----+ 

我想從另一個表中選擇一個表多列和多列,和列別量沒有相同的數額。所以如果我從jobs表中選擇id,i1,i2和i3,並從user_table表中選擇fn,ln和i4,那麼這意味着我從job_table中選擇4條信息,並從user_table中選擇3條信息表。

所以比方說,我想選擇特定的作業,並顯示該作業的信息,也是我想顯示屬於該作業的用戶的信息,那麼它可能去這樣的事情...

作業1:

ID:1,I1:一,I2:K,I3:噸,FN:一,LN:b,6-14:瓦特

作業4這將是:

id:4,i1:d,i2:n,i3:w,fn:c,ln:d,i4:x

作業表和user_table表具有userid的公共列。那麼如何使用這個公共列來編寫我的查詢來完成上述操作?

我用SELECT和WHERE和AND和JOIN和UNION和AS以及GROUP和BY嘗試了各種各樣的東西,並將表名與列名分開編寫,並將表名和列名一起寫入。我只是找不到寫這個查詢的正確方法。

在下面的這些示例中不起作用我只是試圖從user_table表中選擇一件東西,而不是來自作業表的所有內容都不是userid,但我需要能夠從多個東西中選擇多個東西第二張桌子如果需要的話。所以我想從第一個表中選擇一切,並從第二個表中選擇一些特定的東西。

不起作用:

SELECT id, i1, i2, i3, i4 FROM jobs, user_table WHERE jobs.id = $id GROUP BY id 

不起作用:

SELECT * from jobs where id = $id UNION SELECT i4 from user_table where userid = $userid 
+0

請閱讀有關JOIN的SQL教程。 – Barmar

+0

'SELECT jobs。*,user_table。* FROM jobs LEFT JOIN user_table ON jobs.user_id = user_table.userid' - 或INNER JOIN,取決於您對結果的要求(LEFT JOIN將顯示所有作業,無論用戶標識是否匹配,INNER JOIN將強制執行兩者之間的匹配) –

+0

這一個也不會從第二個表中選擇正確的數據。除非我沒有使我的變量正確?查詢後如何使不同表中的所有列的變量?喜歡這個? $ row = mysql_fetch_array($ result);如果($ row){$ date = $ row ['date']; $ imgurl = $ row ['img_url']; } ---日期一來自jobs表,img one來自user_table。當我運行整個事情時,img對於所有作業都是相同的,並且不會根據與作業相關的用戶而改變。 – leoarce

回答

3

查詢

SELECT * FROM jobs 
INNER JOIN user_table on jobs.userid = user_table.userid 

將加入您的工作與用戶的信息。然後只需添加您的where子句:

SELECT * FROM jobs 
INNER JOIN user_table on jobs.userid = user_table.userid 
where jobs.id = $id 
+0

嗯,起初我以爲這個人並沒有從第二張表中選擇數據,但是之後就開始了。想知道緩存是否與我混淆。清除緩存後,我看到奇怪的問題。在Chrome中工作,但不是Firefox。兩張瀏覽器中的第一張表中的所有信息都很好。第二張表格中的數據正在改變不同用戶製作的不同記錄的方式,但對於Firefox上的每條記錄都保持不變。 – leoarce

+0

我以爲另一個更接近,但實際上是這個。這一個有jobs.userid = user_table.userid,它工作,另一個答案有jobs.id = user_table.id ---它不像我想的那樣做不同的瀏覽器錯誤,所以這就是爲什麼這是最好的答案。 – leoarce

0

嘗試

SELECT id, i1, i2, i3, i4 FROM jobs 
inner join user_table on jobs.id = user_table.id WHERE jobs.id = $id GROUP BY id 
+0

試圖使它適應我的真實列名: $ result = mysql_query(「SELECT id,firstname,lastname,company,img_url FROM jobs inner join user_table on jobs.id = user_table.id WHERE jobs.id = $ id GROUP BY id)「)---我得到這個錯誤:字段列表中的列'公司'不明確 – leoarce

+0

所以你必須使它不含糊,選擇你想要的一個例如jobs.company請接受我的回答 –

+1

您的變體是最終工作的結果。無法獲得其他工作答案的變體。我希望緩存不會再搞亂我,但無論如何,這裏是:SELECT jobs。*,user_table.img_url FROM jobs內部連接user_table on jobs.userid = user_table.userid WHERE jobs.id = $ id GROUP BY id – leoarce

1

你想加入的表像這樣:

SELECT j.column1, j.column2, u.column5, u.column6 
FROM 
    jobs j 
INNER JOIN 
    user_table u 
ON 
    u.userid = j.userid 
WHERE 
    j.id = $id 
+0

這一個得到了一個結果。只需添加一顆星星即可選擇任務表中的所有內容。只是不確定這是否也會選擇user_table表中的所有內容。 $ result = mysql_query(「SELECT * FROM jobs jobs INNER JOIN user_table user_table ON user_table.userid = jobs.userid WHERE jobs.id = $ id」)---是否有辦法選擇表1中的所有內容並選擇我的列在表2中? – leoarce

+0

是的,你可以說'SELECT j。*,u.column1,u.column2 FROM ...' – immulatin

+0

我可能會說話太快。對於我試圖在第二張表格中選擇的一條數據,它總是以每條記錄的相同數據片段的形式出現,而這應根據用戶標識而不同。它返回正確的列但錯誤的用戶標識。 – leoarce

相關問題