一切正常,但输出被列出两次。
所以它回应:'输出''输出''输出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>';}
}
}
?>
答案 0 :(得分:5)
试试这段代码:
while ($r = mysql_fetch_assoc($result)){
foreach($r as $uue) {
echo $uue . '<br>';
}
}
您会收到重复的结果,因为默认情况下(MYSQL_BOTH
标记)mysql_fetch_array
会返回2x大小的数组:数字索引 + 字符串索引。
因此,例如$r[0]
和$r['name']
将是数组中包含相同值的不同元素。
此外,您应该停止使用mysql_*
,因为它已被弃用。阅读mysqli_*
函数。
答案 1 :(得分:2)
以下是使用带有子查询的单个查询的示例。当mysql可以在第一次运行时为您提供所需的数据时,无需进行2次循环。由于您的数据作为列数组返回,因此不需要额外的foreach循环。您可以通过索引回显您想要的内容。由于你只拉一列你可以回显$ 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 />';
}
?>
答案 2 :(得分:0)
无论您对@jari的真实答案如何,我认为,为什么您不仅仅使用echo $r[0]. '<br>';
或echo $r['name']. '<br>';
代替额外的foreach