mysql - 获取min(主键)行的所有列

时间:2014-05-25 07:26:53

标签: php mysql sql

我需要将MIN(files.file_id)行的所有列加入/添加到此查询,而不是仅将MIN(files.file_id)的值作为first_file_id返回。

file_id是自动广告主键。

files包含file_id,user_id,filename和timestamp列。

我进行了搜索,似乎可以通过加入一个临时表来选择行MIN(files.file_id),但无法正常工作。

$stmt = $db->prepare("
    SELECT 
        accounts.account_id,
        accounts.account_username,
        accounts.account_password,
        computers.computer_id,
        users.user_id,
        MIN(files.file_id) as first_file_id
    FROM accounts
    LEFT JOIN computers
        on computers.account_id = accounts.account_id
    LEFT JOIN users
        on users.computer_id = computers.computer_id
    LEFT JOIN files
        on files.user_id = users.user_id
    WHERE
        accounts.account_id = :account_id and
        computers.computer_name = :computer_name and
        users.username = :username
");

//bindings (test values)
$stmt->bindValue(':account_id', 1);
$stmt->bindValue(':computer_name', 'COMPUTER_2');
$stmt->bindValue(':username', 'jenny');
//execute
$stmt->execute();

//result (can only be one or none)
$results = $stmt->fetch(PDO::FETCH_ASSOC);

修改

此链接类似于我的想法'我需要link here并显示创建一个包含行信息的临时表。

在观看了@Abhik Chakraborty的回应后,它让我思考。我删除了min,只是将选择添加到我想要的列files并且它可以正常工作。为什么......因为我只返回一个结果(fetch),而files的连接正在加入该表中与其他条件匹配的第一行。在这种情况下,对于该用户而言file_id为最低的行,因为file_id是auto inc主键。

我可以假设我总是会在files中获得最低的file_id行吗?这就是我首先使用MIN(files.file_id)的全部原因,但现在我想知道它是否是必要的,因为它是一个auto inc主键。这也假设我在下面的声明中也没有传递任何ORDER BY条件。我仍然会觉得更安全,知道'将始终返回右行。

$stmt = $db->prepare("
    SELECT 
        accounts.account_id,
        accounts.account_username,
        accounts.account_password,
        computers.computer_id,
        users.user_id,
        files.file_id,
            files.filename,
            files.timestamp
    FROM accounts
    LEFT JOIN computers
        on computers.account_id = accounts.account_id
    LEFT JOIN users
        on users.computer_id = computers.computer_id
    LEFT JOIN files
        on files.user_id = users.user_id
    WHERE
        accounts.account_id = :account_id and
        computers.computer_name = :computer_name and
        users.username = :username
");

0 个答案:

没有答案