3

すべて正常に動作しますが、出力が 2 回リストされています。

'output a' 'output a' 'output b' 'output b' 'output c' 'output c' などとエコーアウトします。

phpmyadmin で mysql クエリを実行すると、すべてが 1 回だけ表示されます。何か案は?

私のコードが行っていることは、多対多フィールドを取得することです

<? 
    $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_BOTHflag)mysql_fetch_arrayは 2 倍のサイズの配列 : number-indexed + string-indexedを返すため、結果が重複します。

したがって、たとえば$r[0]$r['name']は、同じ値を含む配列内の異なる要素になります。

また、mysql_*廃止されているため、使用を中止する必要があります。関数を読んでくださいmysqli_*

于 2013-05-09T20:42:55.923 に答える
2

サブクエリで単一のクエリを使用する例を次に示します。mysql が最初の実行で必要なデータを提供できる場合、2 回ループする必要はありません。また、データが列の配列として返されるため、 while の追加の 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

echo $r[0]. '<br>';@jariに対するあなたの本当の答えに関係なく、私が思うに、単にまたはecho $r['name']. '<br>';その余分なものの代わりに使用しないのはなぜですかforeach

于 2013-05-09T21:12:58.873 に答える