2011-11-22 39 views
1

我很難解釋這個問題,但我會盡量嘗試。來自兩個不同行的mysql_fetch_array

我有兩個不同的數據庫行

SOMETHING 
*---------------------------------------------------------* 
| id | category_id | body     | 
*---------------------------------------------------------* 

    CATEGORY 
*---------------------------------------------------------* 
| id | title | description     | 
*---------------------------------------------------------* 

現在,我想提取的SAMT時間兩行數據,我該怎麼辦呢?

我需要從SOMETHING中提取值,並在SOMETHING的category_id中顯示來自CATEGORY的信息 - 這是如何完成的最佳方式?

我用它來提取這樣的價值觀:

$query = mysql_query("select * from SOMETHING WHERE id='$id' LIMIT 1"); 

while ($row = mysql_fetch_array($query)) { 
    extract($row); 

} 

回答

2

使用JOIN

SELECT 
    S.id, 
    S.category_id, 
    S.body, 
    C.title, 
    C.description 
FROM SOMETHING AS S 
JOIN CATEGORY AS C 
ON S.category_id = C.id 
WHERE id = '42' 
LIMIT 1 

如果有可能不會在欄目表匹配行,你可以使用LEFT JOIN代替。

+0

謝謝,你能給我一個關於如何從類別打印說明的例子嗎?如果兩行都有「描述」會怎麼樣? – 2by

+0

@ 2by:您可以給每個列一個唯一的別名。 'SELECT S.description AS something_description,C.description AS column_description,... etc ...' –

+0

啊好吧,謝謝,我會試試。是的,我需要使用LEFT JOIN,我可以看到。 – 2by

0

這聽起來像你應該加入這兩個表一起:

SELECT * FROM SOMETHING, CATEGORY WHERE SOMETHING.category_id=CATEGORY.id AND 
SOMETHING.id='$id' LIMIT 1 

確保你消毒的$ id進入數據庫!

+0

謝謝,我總是在進行清理:d – 2by

0
$query = mysql_query("SELECT * FROM SOMETHING INNER JOIN CATEGORY ON CATEGORY.id = SOMETHING.category_id WHERE id='$id' LIMIT 1"); 

雖然這對SQL注入很敏感。

+0

@ 2by - by「易受SQL注入攻擊」,stealthyninja警告您,嚴禁將任何用戶輸入直接傳遞到SQL查詢中。 GlaciesofPacis也警告你同樣的事情。 – paulsm4

0

你絕對想要一個「加入」。這是另一個例子:

select a.id ID, b.title TITLE, b.description DESCRIPTION, a.body TEXT 
from something a 
inner join category b on a.id = b.id; 
相關問題