heinetz: MySQL Statement

Beitrag lesen

Hallo Forum,

mir fehlt so ein bisschen die Idee, wie ich eine Aufgabe rein
mit SQL lösen kann, die ich bisher mit PHP gelöst habe. Aber
vielleicht geht's ja doch.

Meine MySQL-Tabelle 'content':

  
   id |  titel |   uebrschrift |   text |    r_id  
------+--------+---------------+--------+--------  
    1 |     A  |     header a  | text a |       0  
------+--------+---------------+--------+--------  
    2 |     B  |     header b  | text b |       0  
------+--------+---------------+--------+--------  
    3 |     C  |     header C  | text c |       2  

Ich lese den Datensatz mit php aus:

  
$mysqlStatm = "  
SELECT *  
FROM `content`  
WHERE `content`.`id`= '1'";  
$mysqlReslt  = mysql_query($mysqlStatm);  
$mysqlResltA =  mysql_fetch_assoc($mysqlReslt);  

... und die Werte in einem assoziativen Array
vorliegen:

  
echo $mysqlResltA['id'];  
//Ausgabe: 1  

Intereesant dabei ist das Feld 'r_id', dass im
Datensatz mit der 'id' 3 ungleich 0 ist. Damit
gehe ich zur zeit so um:

  
  
$mysqlStatm = "  
SELECT *  
FROM `content`  
WHERE `content`.`id`= '3'";  
$mysqlReslt  = mysql_query($mysqlStatm);  
$mysqlResltA =  mysql_fetch_assoc($mysqlReslt);  
  
if ($mysqlResltA['r_id']!=0)  
  {  
   $mysqlStatm = "  
   SELECT  
   `uebrschrift`,  
   `test`  
   FROM `content`  
   WHERE `content`.`id`= ".$mysqlResltA['r_id'];  
   mysql_select_db($db1Name);  
   $mysqlReslt = mysql_query($mysqlStatm);  
   $mysqlResltA2 = mysql_fetch_assoc($mysqlReslt);  
   for (reset($mysqlResltA2);$key=key($mysqlResltA2);next($mysqlResltA2))  
      {  
       $mysqlResltA[$key] = $mysqlResltA2[$key];  
      }  
  }  

und erreiche so, dass einige Werte in meinem assoziativen
Array überschieben werden, wenn die 'r_id' ungeleich 0 ist.

  
echo $mysqlResltA['id'];  
//Ausgabe: 3  
echo $mysqlResltA['text'];  
//Ausgabe: text b  

Diese PHP-Prozedur würde ich gerne abschaffen und das ganze
in einem SQL-Statement definieren. Ich habe folgendes
versucht:

  
  
$mysqlStatm = "  
SELECT  
`content`.*,  
r.`uebrschrift`,  
r.`text`  
FROM `content`  
LEFT JOIN `content` AS r ON `content`.`r_id` = r.`id`  
WHERE `content`.`id`= '3'";  
$mysqlReslt  = mysql_query($mysqlStatm);  
$mysqlResltA =  mysql_fetch_assoc($mysqlReslt);  

Das funktioniert für 3 auch. Die Felder uebrschrift und
text sind so in dem Resultset zweimal mit dem selben Namen
vorhanden. Als erstens content.uebrschrift und als zweites
r.uebrschrift. Das führt dazu, dass durch:

  
$mysqlResltA =  mysql_fetch_assoc($mysqlReslt);  

... das Element $mysqlResltA['uebrschrift'] zwiemal belegt
wird. Beim ersten Mal mit dem Wert aus content.uebrschrift,
der dann durch den Wert aus r.uebrschrift überschrieben wird.

Genau so soll es sein !

Allerdings funktioniert das nicht mehr bei de Datensätzen 1 und 2.
Da wird das Element $mysqlResltA['uebrschrift'] auch zwiemal
belegt. Dummerweise ist der Wert aus r.uebrschrift aber dann
NULL ;(

Hat irgendwer eine Idee, wie ich das anders ohne PHP lösen kann ?

danke für Tipps und

beste gruesse,
heinetz