我有这个查询,它为列选择一个不同的值,但我也需要该查询中的其他内容。我需要它来获取与主选择相关联的不同行。
让我举例说明......
这是我的疑问:
$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返回已完成,但我希望它改为待定。如何更改查询以便返回相应user_id的最后一个值?
如果我不够清楚,请告诉我,以便重新解释。
答案 0 :(得分:5)
只需为用户选择最后一行:
"SELECT payment_status FROM " . DONATION_SECURITY_TABLE . " WHERE user_id = '" . (int) $user_id . "' ORDER BY donation_id DESC LIMIT 1"
答案 1 :(得分:0)
这个怎么样?
$sql = 'SELECT payment_status FROM ' .DONATION_SECURITY_TABLE .
" WHERE user_id = '" . (int) $user_id . "' ORDER BY donation_id DESC LIMIT 1";
答案 2 :(得分:0)
你实际上可以在一个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