0

给定关于对象的信息:id、user_id、group_id

给定用户信息:id_user, id_loc

我需要得到一个查询:

  • 用户名(在表 users 中)

  • 用户所在位置的名称(在表 locs 中)

  • 对象组的名称(在表组中)

我正在尝试这样:

SELECT usuarios.first_name as username
    , usuarios.id as userid
    , usuarios.avatar as useravatar
    , usuarios.id_loc
    , locs.name as locname
    , groups.name as groupname 
FROM usuarios,groups,locs 
WHRE usuarios.id_loc = locs.id 
    AND usuarios.id = 1 
    AND group.id = LIMIT 1

有一个错误说

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 3 行的“AND locs.id = 3 LIMIT 1”附近使用正确的语法

我究竟做错了什么?我可以在一个查询中做到这一点吗?

-编辑-

这是查询生成器代码(php+mysql):

$query_loc_group_user = 'SELECT usuarios.first_name as username,
                                            usuarios.id as userid,
                                            usuarios.avatar as useravatar,
                                            usuarios.id_loc, 
                                            locs.name as locname,
                                            groups.name as groupname
                                     FROM   usuarios,groups,locs
                                     WHRE   usuarios.id_loc = locs.id
                                     AND    usuarios.id = '.$this->id_user.'
                                     AND    group.id = '.$this->id_group.'
                                     LIMIT 1';

如果有帮助,我正在尝试在一个查询中执行此操作

function get_info(){
    $info;
    $result = cache_query('SELECT first_name,last_name,avatar FROM   usuarios WHERE  id = '.$this->id_user);
    foreach($result as $extra){
        $info['username'] = $extra['first_name'].' '.$extra['last_name'];
        $info['avatar'] = $extra['avatar'];
    }
    $result1 = cache_query('SELECT name FROM locs WHERE  id = '.$this->id_user);
    foreach($result1 as $extra){
        $info['locname'] = $extra['name'];
    }   
    $result2 = cache_query('SELECT name FROM groups WHERE  id = '.$this->id; /*objectid*/
    foreach($result2 as $extra){
        $info['groupname'] = $extra['name'];
    }
    return $info;
}
4

3 回答 3

0

那这个呢?

$sql = 'SELECT usuarios.name as username,usuarios.avatar as useravatar, usuarios.id_loc, locs.name as locname';
$sql .= ' FROM usuarios, groups, locs';
$sql .= ' WHERE usuarios.id = '.$this->id_user.' AND groups.id = '.$this->id_group.' AND locs.id = '.$this->id_loc.' LIMIT 1';

$res = mysql_query($sql) or die(mysql_error());
于 2012-05-31T02:13:32.307 回答
0

您需要一些东西来将 usuarios 或 locs 与组相关联。我不知道你的架构,但它可能是这样的:

SELECT
    usuarios.first_name as username,
    usuarios.id as userid,
    usuarios.avatar as useravatar,
    usuarios.id_loc,
    locs.name as locname,
    groups.name as groupname
FROM
    usuarios,
    groups,
    locs
WHRE
    usuarios.id_loc = locs.id AND
    [something?] = groups.id AND    -- This is what you're missing.
                                    -- What table/column relates to groups?
    usuarios.id = 1 AND
    group.id = 1
LIMIT 1

... where [something?] 可能是 usuarios 或 locs 中的 id_group 列。现在,您的顶级查询有两个错误。第一个是简单的语法错误,您没有指定 group.id 值。但是,第二个更严重的是,您的 groups 表没有连接子句。

如果您发布三个表的架构,我可能会给您一个更好的答案,但我敢打赌这就是您所缺少的。如果您在 usuarios 或 locs 中没有 group_id 列,那么您需要更清楚您要查询的确切内容,并且一些示例数据可能对您的预期结果有所帮助。

于 2012-05-31T04:35:08.260 回答
0

在一些帮助朋友之后,我得到了这个解决方案

SELECT usuarios.first_name,usuarios.last_name,usuarios.avatar,poblacion.poblacion,groups.name as groupname
                                FROM usuarios LEFT JOIN poblacion ON usuarios.id_loc=poblacion.idpoblacion,
                                     helps LEFT JOIN groups ON helps.id_group = groups.id
                                WHERE  usuarios.id = '.$this->id_user.' AND groups.id = '.$this->id_group
于 2012-05-31T16:42:45.807 回答