php foreach输出两次

时间:2013-05-09 20:36:55

标签: php mysql many-to-many double

一切正常,但输出被列出两次。

所以它回应:'输出''输出''输出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>';}
        }
    }
?>

3 个答案:

答案 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