Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: MySQL + LEFT JOIN
Forum PHP.pl > Forum > Bazy danych > MySQL
Unik2psc
Witam, mam do Was pytanie a raczej o naprowadzenie do punktu wyjscia.
Mam takie zapytanie:
  1. $sql_var = "SELECT g.guildid, g.name, g.leaderguid, c.name, c.race, (SELECT COUNT(*) FROM guild_member WHERE guildid=g.guildid) FROM guild g LEFT JOIN characters c ON(c.guid=g.leaderguid) WHERE ".$sql_temp." LIMIT 50";

Tutaj wszystko dziala OK. Ale jesli chce je rozszerzyc o round(level).
Kod
$sql_var = "SELECT g.guildid, g.name, g.leaderguid, c.name, c.race, (SELECT COUNT(*) FROM guild_member WHERE guildid=g.guildid), (SELECT round(level) FROM characters gc LEFT JOIN guild_member gm ON(gm.guildid=g.guildid) WHERE gc.guid=gm.guid) FROM guild g LEFT JOIN characters c ON(c.guid=g.leaderguid) WHERE ".$sql_temp." LIMIT 50";
To wyskakuje mi error ze nie znane pole g.guildid.


Jakies pomysly ? - z góry dziekuje za naprowadzenie.

Odrazu mowie ze podzapytanie typu:
Kod
[b](SELECT round(level) FROM characters WHERE guid=(SELECT guid FROM guild_member WHERE guildid=g.guildid))[/b]

odpada bo :
Kod
Warning: mysql_query() [function.mysql-query]: Unable to save result set in C:\Program Files\WebServ\httpd\jarmory\libary\sql.class.php on line 55
Error: Subquery returns more than 1 row


poniewaz mam cachowanie zapytan SQL ktore nie obsluzy tablicy dwu wymiarowej. Dlatego ten blad dla podzapytania.
wookieb
Przecież pisze, że podzapytanie zwraca więcej niż 1 rekord.

  1. guid IN (SELECT guid FROM guild_member WHERE guildid=g.guildid)


Lub
  1. guid=(SELECT guid FROM guild_member WHERE guildid=g.guildid LIMIT 1)


Unik2psc
  1. $sql_var = "SELECT g.guildid, g.name, g.leaderguid, c.name, c.race, (SELECT COUNT(*) FROM guild_member WHERE guildid=g.guildid), (SELECT round(level) FROM characters WHERE guid IN(SELECT guid FROM guild_member WHERE guildid=g.guildid)) FROM guild g LEFT JOIN characters c ON(c.guid=g.leaderguid) WHERE ".$sql_temp." LIMIT 50";


Cytat
Warning: mysql_query() [function.mysql-query]: Unable to save result set in C:\Program Files\WebServ\httpd\jarmory\libary\sql.class.php on line 55
Error: Subquery returns more than 1 row
wookieb
Wiec w takim razie 2 opcja.
Unik2psc
Cytat(wookieb @ 17.08.2009, 17:56:46 ) *
Wiec w takim razie 2 opcja.

odpada, w tym momencie sciagnie mi level z jednego rekordu. A potrzebuje level wszystkich rekordow postaci ktore nalezy do gildi X. A wolalbym to za pomoca jednego zapytania all zrobic.

Przepraszam za moj tepy blad:
Wszystko bylo okej - ale nie mnialo byc ROUND() a SUM().

Typ zapytania:
Kod
$sql_var = "SELECT g.guildid, g.name, g.leaderguid, c.name, c.race, (SELECT COUNT(*) FROM guild_member WHERE guildid=g.guildid), (SELECT SUM(level) FROM characters WHERE guid IN(SELECT guid FROM guild_member WHERE guildid=g.guildid))  FROM guild g LEFT JOIN characters c ON(c.guid=g.leaderguid) WHERE ".$sql_temp." LIMIT 50";
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.