2

列の個別の値を選択するこのクエリがありますが、そのクエリにも何か他のものが必要です。メインの選択に関連付けられた別の行をフェッチする必要があります。

説明しましょう...

これは私のクエリです:

$sql = 'SELECT DISTINCT user_id FROM ' . DONATION_SECURITY_TABLE;
$result = mysql_query($sql);

$rows = mysql_fetch_assoc($result);
mysql_free_result($result);

return $rows;

ご覧のとおり、このクエリは user_id の DISTINCT を返します。

私のテーブル

上記のクエリの戻り値を使用して作成された二重 foreach ループでこのような関数を使用すると、次のようになります。

public function get_donor_status($user_id)
{
    global $db;

    $sql = 'SELECT payment_status FROM ' .DONATION_SECURITY_TABLE .
           " WHERE user_id = '" . (int) $user_id . "'";
    $result = $db->sql_query($sql);

    $row = $db->sql_fetchrow($result);
    $payment_status = $row['payment_status'];

    $db->sql_freeresult($result);

    return $payment_status;
}

この関数はuser_id 2 に対してCompletedを返しますが、代わりにPendingと表示したいと思います。対応する user_id の最後の値を返すようにクエリを変更するにはどうすればよいですか?

よくわからない場合は、もう一度説明できるようにお知らせください。

4

3 に答える 3

5

ユーザーの最後の行を選択するだけです。

"SELECT payment_status FROM " . DONATION_SECURITY_TABLE . " WHERE user_id = '" . (int) $user_id . "' ORDER BY donation_id DESC LIMIT 1"
于 2012-09-17T10:44:51.047 に答える
0

実際には、1 つの SQL ステートメントですべてを取得できます。二重ループは必要ありません。

SELECT
    user_id, payment_status
FROM
    DONATION_SECURITY_TABLE t1
WHERE
    donation_id = (select max(donation_id) from DONATION_SECURITY_TABLE t2 WHERE t2.user_id = t1.user_id)
ORDER BY
    user_id
于 2012-09-17T10:49:45.840 に答える
0

これはどう?

$sql = 'SELECT payment_status FROM ' .DONATION_SECURITY_TABLE .
           " WHERE user_id = '" . (int) $user_id . "' ORDER BY donation_id DESC LIMIT 1";
于 2012-09-17T10:45:36.857 に答える