3

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

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

3 回答 3

6

试试这个代码:

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_*功能。

于 2013-05-09T20:42:55.923 回答
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 可能是更好的选择。您可以走程序路线,这几乎可以将 mysql_ 替换为 mysqli_ ,或者您可以走面向对象的路线。

<?    
$mysqli = new mysqli('host', 'user', 'pass', 'database');
$result = $mysqli->query($query);

while ($r = $result->fetch_object()) {
    echo $r->name . '<br />';
}
?>
于 2013-05-09T20:48:38.327 回答
0

不管你对@jari的真实答案是什么,我认为,为什么你不只使用一个简单的echo $r[0]. '<br>';echo $r['name']. '<br>';而不是那个额外的foreach

于 2013-05-09T21:12:58.873 回答