2012-09-17 175 views
2

我有这个查询,它为列选择一个不同的值,但我也需要其他查询。我需要它获取与主选择关联的不同行。MySQL - 选择不同

让我说明...

这是我的查询:

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

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

return $rows; 

正如你看到它返回该查询返回的DISTINCT的user_id。

My table

如果我在双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的最后一个值?

如果我不够清楚,请让我知道,所以我可以重新解释。

回答

5

只需选择最后一排供用户选择:

"SELECT payment_status FROM " . DONATION_SECURITY_TABLE . " WHERE user_id = '" . (int) $user_id . "' ORDER BY donation_id DESC LIMIT 1" 
0

这个怎么样?

$sql = 'SELECT payment_status FROM ' .DONATION_SECURITY_TABLE . 
      " WHERE user_id = '" . (int) $user_id . "' ORDER BY donation_id DESC LIMIT 1"; 
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