对于单个表,我通常会这样做:
$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中的任何值。我做错了什么?
答案 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']);