Select in einem Select

splasch

Erfahrenes Mitglied
Hi ich hab eine Sql befehl der Lokal funktioniert aber am Webspace Server eine Feheler verursacht.Es werden 2 Select in einandere ausgeführt die daraus wiederum mehere Datensätze liefern ähnlich wie Join

Der Sql befehl lautet:
Code:
Select Clan_name,Clanstufe from game_clan,game_clan_leader where Clan_id = (Select F_Clanid from game_clan_leader where F_Userid='1' limit 1)and F_Userid='1'

Am Webserver erscheint dann die Fehler meldung:
fehlertext: Fehler in der Syntax bei 'Select F_Clanid from game_clan_leader where F_Userid='1' limit 1' in Zeile 1.
fehlernummer: 1064

Lokal am server kommt bei der gleichen Sql abfrage kein fehler.
Weiß jemand woran das liegt bzw villeicht braucht der server nur eine andere zeichensetzung statt der Klammer.

Mfg Splasch
 
Hi

Um welches DBMS handelt es sich?
Falls MySQL: Ältere Versionen von MySQL können keine Subselects interpretieren.
Falls auf dem Server eine ältere Version installiert ist, musst du den Query umbauen mit JOINs
 
Hmm ja es geht um Mysql lokal hab ich die Letze Version installiert.Welche am Webserver ist weiß ich nicht warscheinlich eine ältere Version.
Mit den joins kenn ich mich net so aus wie müßte der befehl dann mit joins lauten.

Mfg Splasch
 
Hallo,

kenne deine Tabellenstruktur nun nicht, aber ich geb mal ein Beispiel.
Wenn Spalten und -Namen nicht stimmen, musst du sie eben noch anpassen:

SQL:
Select gc.Clan_name,
       gc.Clanstufe 
  from game_clan gc,
       game_clan_leader gcl 
 where gc.Clan_id   = gcl.clanid 
   and gcl.F_Userid ='1'

Markus
 
@lmarkus31

Das ist zwar schön und gut aber kein Jonis select.Wie ich über mehre Tabellen abfragen durchführe ist mir klar.
Es geht mehr darum in einer Select 2 abfragen durchzuführen da in einer where klausel der gesuchte wert erst ermittelt werden muß daher 2 select in einem. Joins besitzt eine ähnliche funktion um in eine Select ein weiteres durch joins durchzuführen.

Das muß so verschachtelt werden weil jeder Datensatz in der where klause andere bedingungen bekommt.

SQL:
Select Clan_name,
          Clanstufe
FROM game_clan,
           game_clan_leader
WHERE Clan_id = 
         (Select F_Clanid from game_clan_leader where F_Userid='1' limit 1)
AND F_Userid='1'


Mfg Splasch
 
Zuletzt bearbeitet von einem Moderator:
Ich nehme mal an das du auch mit PHP arbeitest, also warum versuchst du nicht zuerst die verschachtelte Abfrage auszuführen, speicherst die zwischen in ne Variable und dann ne einfache Abfrage mit der Variable, statt dem zweiten Select
 
Hallo splash,

sicher war das von mir gepostete Statement ein Join. Da du innerhalb des Subselects die gleiche Einschränkung gemacht hast (offenbar) auf f_userid=1 hab ich versucht das ganze herauszuziehen. Du würdest ja soundso nur einen Datensatz erwarten in der Subquery, da du vorher ein "=" stehen hast. Also würde ein Join doch Sinn machen, oder nicht?

Weiterhin weiss ich aufgrund deiner Abfrage nicht, welcher der feste und welcher der flexible Teil sein soll bzw. was sie überhaupt bewirken soll. Wenn du das einmal posten möchtest, kann ich dir evtl. besser helfen..

Ansonsten versuch es wie woni schon sagte mit PHP..


Markus
 
Muß wohl übermüdet gewessen sein.
Hab mir noch mal das Diagram angesehen und die Lösung war dann auch ganz einfach.
hab den Sql teil ohne subselect geschrieben da es nicht nötig an dieser stelle ist.hab das wohl mit einen anderen codeteil verwechselt keine Ahnung warum ich mir das Eingebildet habe dort eine subselect zu benötigen.

Danke für eure Antworten es funktioniert nun auch mit der alten Mysql Version.

Hab den Sql bwz php string nun so um geschrieben
PHP:
$SlqClan=sprintf("Select Clan_name,Clanstufe from ".$prefix."clan,".$prefix."clan_leader where Clan_id = F_Clanid and F_Userid='%d'",($_SESSION['User_id']));

Mfg Splasch
 
Zurück