SQL-Query verbinden

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

  • SQL-Query verbinden

    Wie kann ich sinnvoll diese beiden Querys zusammen fassen:
    PHP-Code:
    $f_res mysql_query("SELECT * FROM forum_post 
    WHERE post_forumid='
    $s_row[forum_id]'");
    while(
    $f_row mysql_fetch_array($f_res))
    {
    $s1_res mysql_query("SELECT * FROM forum_post_body 
    WHERE id='
    $f_row[id] AND LIKE post_body='$search'");
    while(
    $s1_row mysql_fetch_array($s1_res))

    Bei der forum_post brauch ich aber den *.
    *winks*
    Gilbert
    ------------------------------------------------
    Hilfe für eine Vielzahl von Problemen!!!
    http://www.1st-rootserver.de/

  • #2
    Hallo Wotan,

    ich kenne die Tabellenstruktur ja nicht, aber im ersten Blick fällt mir ein

    PHP-Code:
    SELECT 
    FROM forum_post LEFT JOIN forum_post_body
       ON forum_post
    .id=forum_post_body.(id von forum_post)
    WHERE 
    Die WHERE Bedingung kann man so lassen, halt den Spaltennamen nicht vergessen.

    *grübel*, ich hoffe nichts falsch verstanden zu haben

    Man liest sich

    Fundamentum

    P. S. Den Stern könnte man sich indirekt sparen, mit SHOW COLUMNS FROM forum_post bzw. SHOW COLUMNS TABLE forum_post_body; aber das sind halt zwei weitere SQL-Abfragen, lohnt sich nicht Oder doch?

    Kommentar


    • #3
      Bringt mir leider nur eine Fehlermeldung:
      You have an error in your SQL syntax near 'LIKE forum_post_body.post_body='%test%'' at line 1

      PHP-Code:
      $f_res mysql_query("SELECT * FROM forum_post 
      LEFT JOIN forum_post_body 
      ON forum_post.id=forum_post_body.id 
      WHERE forum_post.post_forumid='
      $s_row[forum_id]
      AND LIKE forum_post_body.post_body='%
      $search%'")
      or die(
      mysql_error()); 
      So die Tabelle haben folgende Spalten die gebraucht werden:
      forum_post = > id
      forum_post_body => id

      und das Ergebnis soll in
      forum_post_body => post_body
      gesucht werden.
      *winks*
      Gilbert
      ------------------------------------------------
      Hilfe für eine Vielzahl von Problemen!!!
      http://www.1st-rootserver.de/

      Kommentar


      • #4
        Hi Wotan,

        m. E. sollte es tabellenname LIKE .. heissen

        also nicht LIKE forum_post_body.post_body='%$search%'
        sondern

        forum_post_body.post_body LIKE '%$search%'

        Das sollte funktionieren... ich hoffe es geht

        Man liest sich

        Fundamentum

        Kommentar


        • #5
          Bekommt man die Tabelle auch noch darein
          PHP-Code:
          $s_res mysql_query("SELECT * FROM forum_permission 
          WHERE group_id='
          $gruppe' AND forum_darf=1");

          $f_res mysql_query("SELECT *,a.post_forumid AS p_forumid,
          a.post_thread AS p_thread,
          b.id AS p_id
          FROM forum_post AS a
          LEFT JOIN forum_post_body AS b
          ON a.id=b.id
          WHERE a.post_forumid='
          $s_row[forum_id]'
          AND b.post_body LIKE '%
          $search%'")
          or die(
          mysql_error()); 
          *winks*
          Gilbert
          ------------------------------------------------
          Hilfe für eine Vielzahl von Problemen!!!
          http://www.1st-rootserver.de/

          Kommentar


          • #6
            Hallo Wotan

            Dein Anliegen regt mich ja geradezu an, auch mal meine Query's zu überdenken

            Hm... lass mich mal nachdenken...

            Am besten erneut ein LEFT JOIN einfügen....
            PHP-Code:
            SELECT *, a.post_forumid AS p_forumid,
                             
            a.post_thread  AS p_thread,
                             
            b.id AS p_id
            FROM
            forum_post 
            AS a LEFT JOIN forum_post_body AS b
                                       LEFT JOIN forum_permission
            ON a
            .id=b.id
            WHERE a
            .post_forumid='$s_row[forum_id]'
            AND b.post_body LIKE '%$search%',
            AND 
            group_id='$gruppe' AND forum_darf=
            Jetzt bin ich aber mal gespannt

            Man liest sich

            Fundamentum

            Kommentar


            • #7
              Kommt nur wieder die üblich Fehlermeldung.

              Muss die ganze Sachen noch mal überarbeiten.
              *winks*
              Gilbert
              ------------------------------------------------
              Hilfe für eine Vielzahl von Problemen!!!
              http://www.1st-rootserver.de/

              Kommentar


              • #8
                Schade :-(

                am besten du tastest dich Schritt für Schritt heran. Bei der dritten Tabelle gibt es ja keine Beziehung zu den anderen Tabellen *grübel*, dem OUTER JOIN sollte es egal sein.

                Sag bitte bescheid, wenn du es hast, bin nämlich gespannt, danke

                Man liest sich

                Fundamentum

                Kommentar


                • #9
                  wenn, dann mußt du mit den Forenrechten anfangen,
                  denn du willst ja nur in erlaubten Foren suchen
                  PHP-Code:
                  SELECT 
                      
                  *, 
                      
                  forum_post .post_forumid AS p_forumid,
                      
                  forum_post .post_thread  AS p_thread,
                      
                  forum_post_body.id AS p_id
                  FROM
                      forum_permission
                  LEFT JOIN 
                      forum_post 
                          ON 
                  forum_permission.forum_id forum_post.id 
                   
                  // hier noch die richtige Bezeichnung der ForenID aus forum_post eintragen
                  LEFT JOIN 
                      forum_post_body
                          ON 
                  forum_post.id forum_post_body.id )    
                  // oder "USING (id)" wenn es bei beiden id heißt
                  WHERE
                      forum_permission
                  .forum_darf=1
                      
                  AND
                      
                  forum_post.post_forumid='$s_row[forum_id]'
                      
                  AND 
                      
                  forum_post_body.post_body LIKE '%$search%',
                      AND 
                      
                  forum_permission.group_id='$gruppe' 
                  Hier wäre ein Index - müßte ja sogar UNIQUE sein - über (forum_permission.forum_darf,forum_permission.group_id) angebracht, da es für die Abfrage konstant ist.
                  Außerdem empfehlenswert ein Index auf (forum_post_body.post_body) damit das "LIKE" schneller arbeitet

                  PS: mach KEIN "select * ..." das gibt dir meistens viel zu viel zurück, verlangsamt die Abfrage, außerdem erzeugt es unnötigen Traffic zwischen Webserver und Datenbankserver
                  In meinem Board gibt es außer bei count(*) keinen * mehr in den Abfragen => hat unheimlich Speed gebracht
                  TBT

                  Die zwei wichtigsten Regeln für eine berufliche Karriere:
                  1. Verrate niemals alles was du weißt!


                  PHP 2 AllPatrizier II Browsergame

                  Kommentar


                  • #10
                    Bringt trotzdem nur eine Fehlermeldung:
                    You have an error in your SQL syntax near ' AND forum_permission.group_id='1'' at line 17
                    PHP-Code:
                    $s_res = mysql_query("SELECT 
                        *, 
                        forum_post.post_forumid AS p_forumid,
                        forum_post.post_thread  AS p_thread,
                        forum_post_body.id AS p_id
                    FROM
                        forum_permission
                    LEFT JOIN 
                        forum_post ON (forum_permission.forum_id = forum_post.id)
                    LEFT JOIN 
                        forum_post_body ON (forum_post.id = forum_post_body.id)
                    WHERE
                        forum_permission.forum_darf=1
                        AND
                        (forum_post.post_forumid=forum_permission.forum_id)
                        AND 
                        forum_post_body.post_body LIKE '%$search%',
                        AND 
                        forum_permission.group_id='$gruppe'")or die(mysql_error());
                    while($s_row = mysql_fetch_array($s_res))
                        {
                        if($s_row[forum_suchen] == 1)
                            {
                    ?>
                    <tr>
                        <td width="95%"><font class="font10"><?php echo "$s_row[post_subject]";?></font></td>
                        <td width="5%"><a href="thread_see.php?forumid=
                    <?php echo $s_row[p_forumid];?>&post_topic=
                    <?php echo $s_row[p_thread];?>&post_id=
                    <?php echo $s_row[p_id];?>">
                    <img src="images/symbole/link.gif" border="0"></a></td>
                    </tr>
                    <?php
                            
                    }
                        }
                    ?>
                    *winks*
                    Gilbert
                    ------------------------------------------------
                    Hilfe für eine Vielzahl von Problemen!!!
                    http://www.1st-rootserver.de/

                    Kommentar


                    • #11
                      Augen auf, das steht doch da

                      Code:
                      forum_post_body.post_body LIKE '%$search%'[color=red],[/color]
                          AND 
                          forum_permission.group_id='$gruppe'
                      das Komma ist da falsch
                      TBT

                      Die zwei wichtigsten Regeln für eine berufliche Karriere:
                      1. Verrate niemals alles was du weißt!


                      PHP 2 AllPatrizier II Browsergame

                      Kommentar


                      • #12
                        Gut Fehlermeldung weg.

                        Aber jetzt auch keine Ausgabe mehr, obwohl es drei Postings gibt die angezeigt werden müssen.
                        *winks*
                        Gilbert
                        ------------------------------------------------
                        Hilfe für eine Vielzahl von Problemen!!!
                        http://www.1st-rootserver.de/

                        Kommentar

                        Lädt...
                        X