繁体   English   中英

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

[英]How do I get columns from a joined table in PHP?

对于单个表,我通常会执行以下操作:

$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中返回任何值。 我究竟做错了什么?

用JOIN代替

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

您没有得到任何结果的原因是您的查询失败。 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所指出的,您还需要修复多余的右括号。

您最好执行一个适当的JOIN,如echo_Me建议,但这是编码方式的正确语法。

$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'];

结果不会在表名位于列名前面的情况下返回。 如果两个表中的列名都相同,则可能会导致问题。

我认为您还有多余的右括号??

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM