2011-11-22 61 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; 
相关问题