我在php语句中声明了一些值。子查询之外的2个值声明正常,但子查询中的一个不起作用,并且给了我Undefined index:deviceName。
$sql4 = "SELECT endPort, startPort,
(
SELECT deviceName
FROM devices
WHERE devices.deviceID = patching.endDeviceID
)
FROM patching
WHERE deviceID = '$deviceID'
LIMIT 0 , 10";
$query4 = mysql_query($sql4);
while ($row = mysql_fetch_array($query4))
{
$startp = $row['startPort'];
$endp = $row['endPort'];
$endname= $row['deviceName'];
echo '<tr class="logm"><td>'.$startp.'</td><td></td><td>'.$endname.'</td><td></td><td>'.$endp.'</td><td></td></tr>';
}
是否可以声明此值并且我做错了还是有另一种解决此问题的方法。
答案 0 :(得分:0)
您应该使用联接:
SELECT endPort, startPort, deviceName
FROM patching
LEFT JOIN devices USING (deviceID)
WHERE deviceID = '$deviceID'
LIMIT 0 , 10
注意:如果$deviceID
是用户输入,则必须使用mysql_real_escape_string
转义它或使用prepared statements。
答案 1 :(得分:0)
您没有给子查询结果命名:
SELECT endPort, startPort,
(
SELECT deviceName
FROM devices
WHERE devices.deviceID = patching.endDeviceID
) AS deviceName
FROM patching
WHERE deviceID = '$deviceID'
LIMIT 0, 10
虽然你应该使用连接,而不是子查询:
SELECT endPort, startPort, deviceName
FROM patching
LEFT JOIN devices ON(devices.deviceID = patching.endDeviceID)
WHERE patching.deviceID = '$deviceID'
LIMIT 0, 10