[英]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.