Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] join(?) über 3 Tabellen

Einklappen

Unconfigured Ad Widget

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] join(?) über 3 Tabellen

    Hallo,

    Ich habe 3 Tabellen

    Tabelle message
    ID Date Content

    Tabelle link_information
    ID message_id url ....

    Tabelle video_information
    ID message_id url ....


    PHP-Code:
    'SELECT 
            message.id,
            message.date,
            message.content,
            link_information.url,
            link_information.display_name,
            video_information.url url,
            video_information.name,
            video_information.extension      
            FROM        
            message
              
            LEFT JOIN
            video_information
            ON 
            message.id = video_information.message_id     
            
            LEFT JOIN
            link_information
            ON 
            message.id = link_information.message_id  
            
         
                                         
            ORDER by message.date DESC' 

    So nun zu dem Problem, es kann ja jetz sein, das eine Message z.Bsp. 10 Links und 5 Videos.

    Nun hätte ich gerne einen Array der so aufgebaut ist

    PHP-Code:
    Array
    (
        [
    0] => Array
            (
                [
    ID] => 26
                
    [Date] => 2010-03-17 20:20:05
                
    [Content] => Hallowie gehts so?
                [
    VideoInfo] => Array[0] (
                                                    [
    ID] => 20
                                                    
    [url] => 'http://youtube.com/whatever'
                                                
    )
                                    Array[
    1](
                                                    [
    ID] => 20
                                                    
    [url] => 'http://youtube.com/wha3teve2r'
                                               
    )

               [
    LinkInfo] => Array[0] (
                                                    [
    ID] => 20
                                                    
    [url] => 'http://google.com/whatever'
                                                
    )
                                    Array[
    1](
                                                    [
    ID] => 20
                                                    
    [url] => 'http://heise.de/whatever'
                                               
    )

                                    Array[
    2](
                                                    [
    ID] => 20
                                                    
    [url] => 'http://forum.de/whatever'
                                               
    )  
            )

    Habs so probiert aber dann wurde mir schnell klar das das nicht funktionieren kann.

    PHP-Code:
    ...........
    while(
    $stmt->fetch()) {

        
    $video_info[] = array('ID' => $messageID,
                            
    'VideoUrl' => $video_url
                            
    );

        
    $link_info[] = array('ID' => $messageID,
                                      
    'LinkUrl' => $link_url);
        
        
    $Result[] = array('ID' => $messageID,
                          
    'Date' => $date,
                          
    'Content' => $content,
                              
    'VideoInfo' => $video_info,
                              
    'LinkInfo' => $link_url                  
                                         
                          
    );
        

    }
    ................ 
    Das heißt wie kann ich das realisieren, es muss für jede message ID die entsprechenden Einträge in den anderen beiden Tabellen liefern die mit dieser message ID verknüpft sind, Problem ist auch das es auch möglich ist das weder links noch videos zur message vorhanden sind.


    Edit:// Ach fuck falsche Kategorie kann mal jemand verschieben bitte ^^.


  • #2
    Keine Ahnung, was einem Dein Beispiel sagen soll. Oben redest Du von "10 Links und 5 Videos" Unten sehe ich 5 Links, die auch die Arrayschlüssel „VideoInfo“ und „LinkInfo“ verteilt sind. Nach welchen Kriterien weisst nur Du.
    Hab echt keinen Bock mehr auf Ratespiele in diesem Forum.
    --

    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
    Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


    --

    Kommentar


    • #3
      Zitat von nikosch Beitrag anzeigen
      Keine Ahnung, was einem Dein Beispiel sagen soll. Oben redest Du von "10 Links und 5 Videos" Unten sehe ich 5 Links, die auch die Arrayschlüssel „VideoInfo“ und „LinkInfo“ verteilt sind. Nach welchen Kriterien weisst nur Du.
      Hab echt keinen Bock mehr auf Ratespiele in diesem Forum.
      Etwas Textverständnis und das ist kein Ratespiel.

      So nun zu dem Problem, es kann ja jetz sein, das eine Message z.Bsp. 10 Links und 5 Videos.
      Da steht ZBSP. zum Beispiel !! ich könnte auch schreiben jeder Message sind X Links und Y Videos zugeordnet mit X € N und Y € N
      hier steht nirgends was von einer absoluten Anzahl und unten der Array ist auch nur ein Beispiel, zu der Ausgabe die ich haben will.
      Die ich aber NICHT bekomme, das ist ja die Frage, wie ich das so hinbekomme.

      Das heißt "LinkInfo" und "VideoInfo" können auch LEER sein.

      Was verstehst du daran nicht?

      Kommentar


      • #4
        Vergiss es. Du bist auch so ein Ignorant, der es nie verstehen wird, was es heißt, einen ordentlichen Forumsbeitrag zu verfassen. Btw. Dein Traum-Array ist auch syntaktischer Blödsinn. Ach warte - ich weiss - man kann sich ja schliesslich denken, was gemeint ist..
        --

        „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
        Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


        --

        Kommentar


        • #5
          Zitat von nikosch Beitrag anzeigen
          Vergiss es. Du bist auch so ein Ignorant, der es nie verstehen wird, was es heißt, einen ordentlichen Forumsbeitrag zu verfassen. Btw. Dein Traum-Array ist auch syntaktischer Blödsinn. Ach warte - ich weiss - man kann sich ja schliesslich denken, was gemeint ist..
          Man muss nichts denken, man sollte nur lesen können.
          Du bist so Ignorant du wirst niemals vernünftig auf einen Beitrag antworten können, der Thread ist außerdem in der falschen Kategorie steht sogar unten eine Bitte drann ihn zu verschieben, aber allein das du das nicht bemerkt hast zeigt mir schon das du nichtmal einen Beitrag zu Ende liest bevor du deinen geistigen Müll von dir gibst

          Entweder willst du nichts verstehen oder du bist halt tatsächlich so dermaßen 1 Dimensional :/

          Kommentar


          • #6
            Ja, nee is klar Plato.

            Lass mich noch kurz Deine Fehler korrigieren.

            [MOD: verschoben]
            --

            „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
            Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


            --

            Kommentar


            • #7
              Naja es geht um die Datenbankabfrage, könnte man siche ja auch aus dem Titel denken...naja mach dir nichts drauß :O

              Code:
              Tabelle Message 
              ID-----Content
              1        Das ist ein Text... 
              2       Auch ein Text 
              3          Nachricht nr 32423
              Code:
              Tabelle Link 
              ID---Message_ID---------------------Url
              1     3                  hxx:// www.heise.de
              2     3                   hxx://www.google.de
              3     3                 hxx://www.scheße.de
              4     4                 hxx://www.facebook.de
              5     5                   hxx://www.bing.de
              6     5                  hxx://www.asdasd.de
              7     6                 hxx://www.h234234.de
              Code:
              Tabelle Video
              ID---Message_ID--------------------------------url_video
              1     2                  http://www.youtube.com/watch?v=jBU93V2x44E
              2     2                   http://www.youtube.com/watch?v=jBU93V2x44E  
              3     3                   http://www.youtube.com/watch?v=jBU93V2x44E
              4     3                  http://www.youtube.com/watch?v=jBU93V2x44E
              5     3                   http://www.youtube.com/watch?v=jBU93V2x44E
              6     4                  http://www.youtube.com/watch?v=jBU93V2x44E
              7     6                   http://www.youtube.com/watch?v=jBU93V2x44E
              Also Nochmal wie ist es möglich per Select, alle Daten aus den anderen beiden Tabellen zu der jeweiligen ID der ersten Tabelle zu bekommen ?

              ALS BEISPIEL erste Tabelle mit ID 3 nun will ich alle Zeilen der anderen Tabelle auslesen die ebenfalls diese in diesem Beispiel orange gefärbte message_id 3 haben.

              Kommentar


              • #8
                Wenn du jemandem eine Frage stellst, der weder weiß, was du weißt noch jemals etwas von deinem Projekt, deiner Idee und deinem Kenntnisstand etwas weiß, musst du IMMER die Fragen und Problembeschreibungen so formulieren, dass man sich nichts selbst denken muss. Wenn du einen professionellen Coach wünscht, der an deiner Seite ist und dich an die Hand nimmt, dann bezahle ihn. Zu erwarten, wir w+rden hier sowas leisten, ist ziemlich vermessen bzw. zeigt, dass du die Zielsetzung des Forums nicht verstanden hast.

                Es ist ganz einfach: Formuliere deine Fragestellung vernünftig, dann wird dir geholfen. Formuliere sie nicht vernünftig und reagiere patzig auf Rückfragen, dann wirst du in diesem Forum keine Freude haben.

                Es kostet dich vielleicht 5 Minuten deines Lebens, die Fragestellung nicht runterzuschmieren sondern vernünftig zu stellen. Uns kostet es unter Umständen Stunden, dir was aus der Nase zu ziehen oder was reinzuinterpretieren und hinterher verärgert festzustellen, dass du doch was ganz anderes gemeint hast.


                Zum Thema zurück:
                Also Nochmal wie ist es möglich per Select, alle Daten aus den anderen beiden Tabellen zu der jeweiligen ID der ersten Tabelle zu bekommen ?
                1. Möglichkeit:
                Code:
                SELECT ... FROM Tabelle WHERE Message_ID = 3
                2. Möglichkeit:
                Code:
                SELECT ... FROM Message LEFT OUTER JOIN Link ON Message.ID=Link.Message_ID
                Ich empfehle dir jedoch, drei separate Selects abzusetzen. Select #1 fragt die Messages ab und speichert sie in einem Array (Message-ID als Key).
                Select #2 fragt die Videos ab und steckt sie bei der zugehörigen Message hinzu. Da die Messages per ID angesprochen werden können, ist das kein Problem mehr.
                Select #3 macht selbiges für die Links.
                www.php-maven.org PHP und Maven vereint: Build/Deploy/Produktion/Konfiguration, Projekt Management, CI, PHPUnit, zahlreiche Frameworks
                Twitter @ https://twitter.com/#!/mepeisen und Facebook @ http://t.co/DZnKSUih

                Kommentar


                • #9
                  Zitat von mepeisen Beitrag anzeigen
                  Zu erwarten, wir w+rden hier sowas leisten, ist ziemlich vermessen bzw. zeigt, dass du die Zielsetzung des Forums nicht verstanden hast.


                  Es ist ganz einfach: Formuliere deine Fragestellung vernünftig, dann wird dir geholfen. Formuliere sie nicht vernünftig und reagiere patzig auf Rückfragen, dann wirst du in diesem Forum keine Freude haben.

                  Es kostet dich vielleicht 5 Minuten deines Lebens, die Fragestellung nicht runterzuschmieren sondern vernünftig zu stellen. Uns kostet es unter Umständen Stunden, dir was aus der Nase zu ziehen oder was reinzuinterpretieren und hinterher verärgert festzustellen, dass du doch was ganz anderes gemeint hast.
                  Ich hab keine Erwartungen an niemanden außer mir selber hier.

                  Ich habe das Ganze auch nicht so formuliert nach dem Motto macht mal, ich hab versucht das ganze mit Beispielen zu erklären und habe das -meiner Meinung- so getan das man versteht um was es geht, und hab dazu auch noch meinen bisherigen Ansatz eingebracht.

                  In meinem ersten Post steht
                  ... für jede message ID die entsprechenden Einträge in den anderen beiden Tabellen liefern die mit dieser message ID verknüpft sind...
                  wie diese miteinander verknüpft sind hab ich sogar noch farblich hervorgehoben.

                  darf ich fragen was daran unklar ist und wo hier das Problem an meiner Formulierung ist?

                  Aber egal, wenn dann so eine unfreundliche Antwort kommt wie die von (von wem auch sonst) nikosch, dann Antwort ich halt so.

                  Ich erwarte hier von niemandem dass er mir antwortet ich wünsche es mir lediglich um bei meinem Projekt weiter zu kommen.

                  Zum Thema zurück:

                  1. Möglichkeit:
                  Code:
                  SELECT ... FROM Tabelle WHERE Message_ID = 3
                  2. Möglichkeit:
                  Code:
                  SELECT ... FROM Message LEFT OUTER JOIN Link ON Message.ID=Link.Message_ID
                  Ich empfehle dir jedoch, drei separate Selects abzusetzen. Select #1 fragt die Messages ab und speichert sie in einem Array (Message-ID als Key).
                  Select #2 fragt die Videos ab und steckt sie bei der zugehörigen Message hinzu. Da die Messages per ID angesprochen werden können, ist das kein Problem mehr.
                  Select #3 macht selbiges für die Links.
                  Nett das du dich damit beschäftigst und helfen willst, das weiß ich aufjedenfall zu schätzen.

                  Kann es gerade leider nicht testen, aber wäre
                  PHP-Code:
                  $last_key key (end ($Message)); 
                  // mit key von dem Array Message as ID der Tabelle message.
                  'SELECT xy FROM
                  Link
                  WHERE 
                  message_id ='
                  .$Message[16].'
                  OR
                  message_id ='
                  .$Message[17].
                  OR
                  message_id ='
                  .$Message[18].'
                  ..........
                  OR 
                  message_id ='
                  .$Message[$last_key]; 
                  Vom Ansatz her dann richtig?

                  Kommentar


                  • #10
                    Lerne bitte im MySQL-Tutorial deines Vertrauens die Verwendung des Operators "IN".

                    Zum anderen: Ich merke, wenn sich jemand beratungsresistent gibt. Nur irgendwann wirst du wie gesagt mit dieser Einstellung nicht glücklich werden. Ich bin nicht der einzige, der sich lieber einem anderen Thema widmet als einem Autor wiederholt 08/15 Fragen aus der Nase zu ziehen. Ein Beispiel sollte durchgängig logisch sein und sich nicht selbst widersprechen.
                    mehr sage ich dazu nicht mehr. Zum Thema hier auch nicht mehr. Auf Rätselraten habe ich nämlich genausowenig Bock.
                    www.php-maven.org PHP und Maven vereint: Build/Deploy/Produktion/Konfiguration, Projekt Management, CI, PHPUnit, zahlreiche Frameworks
                    Twitter @ https://twitter.com/#!/mepeisen und Facebook @ http://t.co/DZnKSUih

                    Kommentar


                    • #11
                      Zitat von mepeisen Beitrag anzeigen
                      Lerne bitte im MySQL-Tutorial deines Vertrauens die Verwendung des Operators "IN".

                      Zum anderen: Ich merke, wenn sich jemand beratungsresistent gibt. Nur irgendwann wirst du wie gesagt mit dieser Einstellung nicht glücklich werden. Ich bin nicht der einzige, der sich lieber einem anderen Thema widmet als einem Autor wiederholt 08/15 Fragen aus der Nase zu ziehen. Ein Beispiel sollte durchgängig logisch sein und sich nicht selbst widersprechen.
                      mehr sage ich dazu nicht mehr. Zum Thema hier auch nicht mehr. Auf Rätselraten habe ich nämlich genausowenig Bock.

                      Ich finde das irgendwie paradox auf der einen Seite gibts du 2 hilfreiche antworten und versuchst mir einen Lösungsweg zu zeigen, auf der anderen Seite schreibst du was von Rätselraten, jedoch weißt du genau was ich will und um was es geht.

                      Rein logisch betrachtet wiedersprechen sich die Beispiele in keinen einzigen Fall.

                      Ja ok vllt. wär der Syntax so richtiger, hat aber mit der Logik der Beispiele an sich 0 zu tun.
                      PHP-Code:
                        [VideoInfo] => [0]=>Array (
                                                                      [
                      ID] => 20
                                                                      
                      [url] => 'http://youtube.com/whatever'
                                                              
                      )
                                             [
                      1]=> Array(
                                                                      [
                      ID] => 20
                                                                      
                      [url] => 'http://youtube.com/wha3teve2r'
                                                              

                      ich bin definitv nicht Beratungsresistent, doch bisher hat niemand eine konstruktive Kritik angebracht wo genau bei meinen Formulierungen etwas unlogisch, falsch whatever sein soll.

                      Das einzige was kommt ist in etwa "du bist so, dein Beitrag ist scheiße, also halt deine Fresse".

                      Kommentar


                      • #12
                        Kannst du endlich mal aufhören, darauf rumzureiten und endlich ins MySQL-Handbuch oder in deinem Lieblings-Tutorial schauen, ob der Operator IN dort erklärt wird? Ich werde dir in Zukunft nicht mehr weiterhelfen, wenn du nicht endlich dazulernst, dass du zumindest von mir keine Vorlagen für Copy&Paste kriegst. Eigeninitiative in Form von Recherche vorgegebener Stichwörter, musst du zeigen. Ansonsten wird das mit dem Programmieren nichts mehr.
                        www.php-maven.org PHP und Maven vereint: Build/Deploy/Produktion/Konfiguration, Projekt Management, CI, PHPUnit, zahlreiche Frameworks
                        Twitter @ https://twitter.com/#!/mepeisen und Facebook @ http://t.co/DZnKSUih

                        Kommentar


                        • #13
                          Zitat von mepeisen Beitrag anzeigen
                          Kannst du endlich mal aufhören, darauf rumzureiten und endlich ins MySQL-Handbuch oder in deinem Lieblings-Tutorial schauen, ob der Operator IN dort erklärt wird? Ich werde dir in Zukunft nicht mehr weiterhelfen, wenn du nicht endlich dazulernst, dass du zumindest von mir keine Vorlagen für Copy&Paste kriegst. Eigeninitiative in Form von Recherche vorgegebener Stichwörter, musst du zeigen. Ansonsten wird das mit dem Programmieren nichts mehr.
                          Ich hab schon nachgeschaut, sofort wo ich deinen Beitrag gesehen hab, wo liest du jetz bitte wieder raus das ich ein fertiges Script von dir will xD

                          Sobald ich daheim bin werd ich es umsetzten.
                          Und wenn ich es dann geschafft hab diesen Thread als erledigt markieren.

                          Kommentar


                          • #14
                            So habs, wenns jemand wirklichen brauchen sollte hier die Lösung(dabei ist array_empty eine selbstgeschriebene Funktion die Prüft ob der Array leer ist oder Werte enthält).

                            Ein bisschn Sorgen macht mir die Performance weil ich in den meisten Fällen 4 Schleifen durchlaufen lasse, aber naja hier

                            PHP-Code:
                            $sql 'SELECT
                                    message.id,
                                    message.date,
                                    message.content
                                    FROM
                                    message
                                    ORDER BY date DESC
                                    LIMIT 0, 20'
                            ;

                            $stmt $db->prepare($sql);
                            if(!
                            $stmt->execute()) {
                            return 
                            $db->error;
                            }
                            $stmt->bind_result($messageID$date$text);

                            while(
                            $stmt->fetch()) {
                                
                                
                            $MessageIDs[] = $messageID;
                                
                            $ContentArray[$messageID] = array('Date' => $date,
                                                                  
                            'Text' => $text);
                                
                            }
                            $MessageIDs implode(','$MessageIDs);

                            $stmt->close();

                            $sql 'SELECT
                                    message_id, 
                                    url,
                                    host
                                    FROM
                                    link_information
                                    WHERE message_id IN('
                            .$MessageIDs.')';
                            $stmt $db->prepare($sql);
                            $stmt->execute();
                            $stmt->bind_result($link_m_id$link_url$link_host);

                            while(
                            $stmt->fetch()){
                                    
                                
                            $link_info[] = array('MessageID' => $link_m_id,
                                                     
                            'LinkUrl' => $link_url,
                                                     
                            'LinkHost' => $link_host);
                                
                            }
                            $stmt->close();

                            $sql 'SELECT
                                    message_id, 
                                    url,
                                    xcy
                                    FROM
                                    video_information
                                    WHERE message_id IN('
                            .$MessageIDs.')';
                            $stmt $db->prepare($sql);
                            $stmt->execute();
                            $stmt->bind_result($video_m_id$video_url$xyc);

                            while(
                            $stmt->fetch()){
                                    
                                
                            $video_info[] = array('MessageID' => $video_m_id,
                                                     
                            'videoUrl' => $video_url,
                                                     
                            'xyc' => $xyc);
                                
                            }
                            $stmt->close();
                            $db->close();

                            // video_Info Array mit Content Array verknüpfen
                            if(!array_empty($video_info)){

                            $lenContent count($ContentArray);
                            $lenVideo count($video_info);

                            if(
                            $lenContent $lenVideo) {
                                foreach(
                            $ContentArray as $key => $content) {
                                    foreach(
                            $video_info as $pinfo) {
                                       if(
                            $key == $pinfo['MessageID']) {
                                           
                                           
                            $ContentArray[$key]['videoInfo'][] = $vinfo;
                                           
                                       }        
                                        
                                    }        
                                }    
                            }
                            //-------------------------------------------------------
                            if($lenContent $lenVideo) {
                                foreach(
                            $video_info as $key => $pinfo) {
                                    foreach(
                            $ContentArray as $mID => $cont) {
                                       if(
                            $pinfo['MessageID'] == $mID) {
                                           
                                           
                            $ContentArray[$key]['videoInfo'][] = $pinfo;
                                           
                                       }        
                                        
                                    }        
                                }    
                                
                            }


                            // Ende Verknüpfung video_Array mit Content_Array


                            // Link_Info Array mit Content Array verknüpfen
                            if(!array_empty($link_info)){


                            $lenContent count($ContentArray);
                            $lenLink count($link_info);

                            if(
                            $lenContent $lenLink) {
                                foreach(
                            $ContentArray as $key => $content) {
                                    foreach(
                            $link_info as $linfo) {
                                       if(
                            $key == $linfo['MessageID']) {
                                           
                                           
                            $ContentArray[$key]['LinkInfo'][] = $linfo;
                                           
                                       }        
                                        
                                    }        
                                }    
                            }
                            //-------------------------------------------------------
                            if($lenContent $lenLink) {
                                foreach(
                            $link_info as $key => $linfo) {
                                    foreach(
                            $ContentArray as $mID => $cont) {
                                       if(
                            $linfo['MessageID'] == $mID) {
                                                          
                                           
                            $ContentArray[$mID]['LinkInfo'][] = $linfo;
                                       
                                           
                                       }        
                                        
                                    }        
                                }    
                                
                            }


                            // Ende Verknüpfung Link_Array mit Content_Array 

                            Kommentar

                            Lädt...
                            X