一切正常,但输出被列出两次。
所以它回显为:'输出a' '输出a' '输出b' '输出b' '输出c' '输出c'等等。
当我在phpmyadmin中执行mysql查询时,所有内容只列出一次。什么好主意吗?
我的代码正在做的是获取一个多对多字段
<?
$something = mysql_query('select UserID from users where Username ="'. $username .'"');
while ($row = mysql_fetch_array($something)) {
$barf = $row['UserID'];
}
$result = mysql_query('SELECT name FROM items p LEFT JOIN list up ON p.item_id = up.item_id WHERE up.UserID = "' . $barf . '"');
while ($r = mysql_fetch_array($result)) {
foreach($r as $uue) {
echo $uue . '<br>';}
}
}
?>
试试下面的代码:
while ($r = mysql_fetch_assoc($result)){
foreach($r as $uue) {
echo $uue . '<br>';
}
}
你得到重复的结果,因为默认情况下(MYSQL_BOTH
标志)mysql_fetch_array
返回2倍大小的数组:数字索引 + 字符串索引。
因此,例如$r[0]
和$r['name']
将是数组中包含相同值的不同元素。
另外,您应该停止使用mysql_*
,因为它已被弃用。阅读mysqli_*
函数
下面是一个使用单个查询和子查询的示例。当mysql可以在第一次运行时给你需要的数据时,不需要做两次循环。此外,在while中不需要额外的foreach循环,因为您的数据将作为列数组返回。你可以用index来回显你想要的。因为你只拉一列,你可以回显$r['name'],或者如果你做MYSQL_NUM,你可以回显$r[0]。
<?
$escaped_username = mysql_real_escape_string($username);
$query = <<<SQL
SELECT
name
FROM
items p
LEFT JOIN list up ON p.item_id = up.item_id
WHERE
up.UserID = (SELECT UserID FROM users WHERE Username = '{$escaped_username}')
SQL;
$result = mysql_query($query);
while ($r=mysql_fetch_array($result, MYSQL_ASSOC)) {
echo $r['name'] . '<br />';
}
?>
也使用mysqli可能是一个更好的路线,因为其他人已经说过。你可以走过程路线,也就是用mysqli_代替mysql_,或者你可以走面向对象路线。
<?
$mysqli = new mysqli('host', 'user', 'pass', 'database');
$result = $mysqli->query($query);
while ($r = $result->fetch_object()) {
echo $r->name . '<br />';
}
?>
不管你的真实答案是@jari,我想,为什么你不使用简单的echo $r[0]. '<br>';
或echo $r['name']. '<br>';
而不是额外的foreach