0

オブジェクトに関する与えられた情報: id、user_id、group_id

ユーザーに関する与えられた情報: id_user、id_loc

1 つのクエリを取得する必要があります。

  • ユーザーの名前 (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 構文にエラーがあります。3 行目の 'AND locs.id = 3 LIMIT 1' 付近で使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

私は何を間違っていますか?これを 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';

それが役立つ場合、私はこれを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

... [何か?] はおそらく、usuarios または locs の id_group 列です。現在、トップ クエリに 2 つのエラーがあります。1 つ目は単純な構文エラーです。group.id 値を指定していません。2 つ目は、より深刻な問題ですが、groups テーブルに結合句がないことです。

3 つのテーブルのスキーマを投稿していただければ、おそらくさらに適切な回答が得られると思いますが、それが不足していることは間違いありません。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 に答える