Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> MySQL + LEFT JOIN, error pola
Unik2psc
post
Post #1





Grupa: Zarejestrowani
Postów: 16
Pomógł: 1
Dołączył: 27.07.2009

Ostrzeżenie: (0%)
-----


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.

Ten post edytował Unik2psc 17.08.2009, 16:19:33
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
wookieb
post
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




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)


Go to the top of the page
+Quote Post
Unik2psc
post
Post #3





Grupa: Zarejestrowani
Postów: 16
Pomógł: 1
Dołączył: 27.07.2009

Ostrzeżenie: (0%)
-----


  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


Ten post edytował Unik2psc 17.08.2009, 16:56:02
Go to the top of the page
+Quote Post
wookieb
post
Post #4





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Wiec w takim razie 2 opcja.
Go to the top of the page
+Quote Post
Unik2psc
post
Post #5





Grupa: Zarejestrowani
Postów: 16
Pomógł: 1
Dołączył: 27.07.2009

Ostrzeżenie: (0%)
-----


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";


Ten post edytował Unik2psc 17.08.2009, 18:11:26
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 15:42