Eroare de sintaxă de interogare selectată din 3 tabele

S-a dat informații despre un obiect: id, user_id, group_id

Dată informații despre un utilizator: id_user, id_loc

Trebuie sa obtin o interogare:

  • Numele utilizatorului (în tabelul utilizatorilor)

  • Numele locației utilizatorului (în locația tabelului)

  • Numele grupului obiectului (în grupuri de tabele)

Mă străduiesc astfel:

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

având o eroare spunând

Aveți o eroare în sintaxa SQL; verificați manualul   corespunde versiunii serverului dvs. MySQL pentru sintaxa potrivită de utilizat   lângă 'AND locs.id = 3 LIMIT 1' la linia 3

Ce fac greșit? pot face acest lucru într-o singură interogare?

-EDITAȚI | ×-

Acesta este codul generatorului de interogări (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';

În cazul în care ajută, eu încerc să fac într-o singură interogare acest lucru

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;
}
0
aceasta a fost întreaga linie: WHERE usuarios.id = '. $ this-> id_user.' ȘI grups.id = '. $ This-> id_group.' ȘI locs.id = '. $ This-> id_loc.' LIMIT 1 ';
adăugat autor Toni Michel Caubet, sursa
Editat întrebarea cu codul PHP, vă rugăm să rețineți că numele tabelelor se pot schimba puțin (în unele din ele unele)
adăugat autor Toni Michel Caubet, sursa
oh, văd acum, a fost o greșeală într-unul din câmpuri .. mulțumesc pentru vârful;) sale un pic frustrant "aproape de" ero, hehe
adăugat autor Toni Michel Caubet, sursa
oricum nu am primit niciun caz în care să funcționeze clausul ....
adăugat autor Toni Michel Caubet, sursa
da .. chiar dacă numai în cazul în care id_user = 5
adăugat autor Toni Michel Caubet, sursa
am editat cu o imprimare înainte de execuție și cu generator de php
adăugat autor Toni Michel Caubet, sursa
@ToniMichelCaubet - Vrei să spui, în cazul în care clauza încă nu reușesc să compileze?
adăugat autor Ravinder Reddy, sursa
@ToniMichelCaubet Vă rog să postați interogarea după concatenare
adăugat autor Ravinder Reddy, sursa
ai putea posta tot blocul de executie te rog? Mi-ar plăcea să văd care este linia 3
adăugat autor Sebas, sursa
acest lucru este într-adevăr destul de ciudat. Ce se întâmplă dacă elimini total această linie? nu în cazul în care clauza?
adăugat autor Sebas, sursa
bine, multumesc! Dar ați putea încerca doar să eliminați clauza de unde să vedeți dacă cel puțin se compilează? Vreau să fiu sigur că codarea returnării carului este corectă
adăugat autor Sebas, sursa
Da :-) Mă bucur că am ajutat! rgds.
adăugat autor Sebas, sursa

3 răspunsuri

după ce am ajutat un prieten, am ajuns la această soluție

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
0
adăugat

Ce zici de asta?

$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());
0
adăugat
aceeași interogare concatenare diferite?
adăugat autor Toni Michel Caubet, sursa
mulțumesc pentru ajutor, dar problema pare să fie în interogare
adăugat autor Toni Michel Caubet, sursa
exact, în acest fel veți sări peste deranjamentul chr (13) greșit interpretat. Mă întrebam ...
adăugat autor Sebas, sursa

Aveți nevoie de ceva pentru a lega usuarios sau locurile la grupuri. Nu vă cunosc schema, dar va fi probabil așa:

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

... unde [ceva?] este probabil o coloană id_group fie în usuarios, fie în loc. În momentul de față, interogarea de vârf are două erori. Prima este o eroare de sintaxă simplă, nu specificați o valoare grup.id. Cel de-al doilea, însă, care este mai grav, este că nu aveți o clauză de adunare pentru tabelul grupurilor dvs.

Dacă postați schemele dvs. pentru cele trei mese, vă pot da probabil un răspuns chiar mai bun, dar eu pariez că asta lipseste. Dacă nu aveți o coloană group_id în usuarios sau în locații, atunci trebuie să fii mai clar cu privire la exact ceea ce cauți să interoghezi și unele date de exemplu ar putea fi de ajutor în ceea ce privește rezultatul tău așteptat.

0
adăugat
MySQL - comunitatea Română
MySQL - comunitatea Română
19 participanți

Comunitatea română a programatorilor MySQL.