如何从PHP中的连接表中获取列?

时间:2013-08-02 00:03:29

标签: php mysql join

对于单个表,我通常会这样做:

$length = 42;
$result = mysql_query ('SELECT * FROM table WHERE length = "' . $length . '"', $dbconn);
$rowsfound = mysql_num_rows ($result);
if ($rowsfound == 1) {
    $row = mysql_fetch_array ($result);
    $tableid = $row ['table_id'];
    $tablecloth = $row ['tablecloth'];
    $height = $row ['height'];
    ...

但是如何从连接表中获取这样的行:

$chairid = 123;
$result = mysql_query ('SELECT * FROM table,chair WHERE chair.id = "' . $chairid . '" AND table.table_id = chair.table_id', $dbconn);
$rowsfound = mysql_num_rows ($result);
if ($rowsfound == 1) {
    $row = mysql_fetch_array ($result);
    $tableid = $row ['table.table_id'];
    $tablecloth = $row ['table.tablecloth'];
    $height = $row ['table.height'];
    ...

这不会返回$ table.tablecloth中的任何值。我做错了什么?

4 个答案:

答案 0 :(得分:1)

使用JOIN执行此操作

    SELECT * FROM table
    INNER JOIN chair  ON table.table_id = chair.table_id 
    WHERE chair.id = "' . $chairid . '" 

答案 1 :(得分:1)

您没有获得任何结果的原因是您的查询失败。 table是一个保留字,因此您需要在其周围添加返回标记,如下所示:

$result = mysql_query ('SELECT * FROM `table`,`chair` WHERE `chair`.id = "' . $chairid . '" AND `table`.table_id = `chair`.table_id', $dbconn);

如果你有适当的错误处理方式,你会想到这一点(请注意or die()

$result = mysql_query ('SELECT * FROM `table`,`chair` WHERE `chair`.id = "' . $chairid . '" AND `table`.table_id = `chair`.table_id', $dbconn) or die(mysql_error())

请参阅此处的保留字列表:http://dev.mysql.com/doc/refman/5.5/en/reserved-words.html

除此之外,Kim指出你还需要修复额外的右括号。

答案 2 :(得分:0)

你最好做一个像echo_Me建议的正确的JOIN,但这是你编码方式的正确语法。

$result = mysql_query ('SELECT table.*,chair.* FROM table,chair WHERE chair.id = "' . $chairid . '" AND table.table_id = chair.table_id', $dbconn);

然后

if ($rowsfound == 1) {
    $row = mysql_fetch_array ($result);
    $tableid    = $row ['table_id'];
    $tablecloth = $row ['tablecloth'];
    $height     = $row ['height'];

结果不会返回列名前面的表名。如果两个表中都有一个具有相同名称的列名,则会导致问题。

答案 3 :(得分:-1)

我认为你有额外的右括号? )

$tableid = $row ['table.table_id']);
$tablecloth = $row ['table.tablecloth']);
$height = $row ['table.height']);