[PHP/MySQL] JOIN LEFT ... ON Problem

Goltergaul

Well-known member
ID: 17553
L
26 April 2006
480
7
ich hab hier folgende 2 Tabellen

tw1_truppen
name,id,x,y,user_id
tw1_user_movements
user_id,waypoints,timestamp,missiontype

und ich möchte dass alle Zeilen aus tw1_truppen ausgegeben werden und wenn vorhanden die daten von tw1_user_movements dazu. (user_id's müssen übereinstimmen.)

Habe hierfür folgenden query, zeigt aber manchmal garnichts an obwohl in tw1_truppen auf jeden fall ein eintrag mit der richtigen user_id vorhanden ist. Was mache ich falsch?
PHP:
$troops = mysql_query("
      SELECT 
            ".$config_prefix."truppen.name,".$config_prefix."truppen.id,".$config_prefix."truppen.x,".$config_prefix."truppen.y,".$config_prefix."user_movements.timestamp,".$config_prefix."user_movements.waypoints
      FROM
            ".$config_prefix."truppen
      LEFT JOIN
            ".$config_prefix."user_movements
      ON
            ".$config_prefix."truppen.user_id=".$config_prefix."user_movements.user_id
      WHERE 
            ".$config_prefix."truppen.user_id=".$user_id." AND ".$config_prefix."user_movements.missiontype='troop'"
      , $handler);
 
das liegt an
PHP:
...movements.missiontype='troop'
damit radierst du alle datensätze aus wo missiontype nicht troop ist, also auch sämtliche wo missiontype null ist. (also wenn kein eintrag in movements da ist)
also musst du deine bedingung umformulieren...
PHP:
(user_movements.missiontype='troop' OR user_movements.missiontype IS NULL)

btw: müssten nicht eigentlich die truppen ne bewegung haben und nicht der user? ein user kann doch mit sicherheit auch mehrere truppen haben?
 
ohh ah stimmt danke:LOL:

Ja ein User kann mehrere Truppen haben. Dir truppen sind in tw1_truppen gespeichert und die bewegung der truppen in tw1_user_movements

die user selber sind wieder wo anders ;) Oder was meinst du jetzt?
 
wie ordnest du bitte den verschiedenen truppen verschiedene bewegung zu?

ich hab zb truppe1 und truppe2 und bewegungen nach süden und nach norden.

PHP:
tw1_truppen
truppe1,1,10,10,ich
truppe2,2,41,20,ich
tw1_user_movements
ich,nach norden,20uhr,bewegen
ich,nach süden,21uhr,bewegen
wenn ich jetzt wie du joine hab ich am ende aber

PHP:
truppe1,1,10,10,ich - ich,nach norden,20uhr,bewegen
truppe1,1,10,10,ich - ich,nach süden,21uhr,bewegen
truppe2,2,41,20,ich - ich,nach norden,20uhr,bewegen
truppe2,2,41,20,ich - ich,nach süden,21uhr,bewegen

da es keine zuordnung der bewegung zur truppe gibt sondern nur zum user. oder überseh ich hier was?
 
ja irgendwas stimmt da nicht... Wie müsste der query denn korrekt aussehen?
es sollen eben alle truppen aufgelistet werden die eine bestimmte user_id haben und wenn ein eintrag in tw1_user_movements vorhanden ist, soll auf die daten aus dieser tabelle zugegriffen werden können
 
keine ahnung wie der query genau aussehen muss... dazu müsste ich wissen was du machen willst. meiner meinung nach müsste tw1_user_movements nicht die user_id enthalten sondern die truppen id... da nicht user sich bewegt sonder die truppen und ein user mehrere truppen haben kann kommste mit der user_id nicht weit.

aber wie gesagt keine ahung was du machen willst... eventuell ist es ja so richtig, bloss etwas unlogisch.
 
Oje jetzt weiß ich was du meinst :D Natürlich ja... hatte die Logik von dem Join noch ned ganz kapiert aber jetzt hab ichs. Danke *gg*