MySQL befehl verstehen und umschreiben

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

  • MySQL befehl verstehen und umschreiben

    Hallo

    Ich hoffe hier finden sich eine MySQL'er die sich vielleicht mal mein Problem anschauen können.

    Mal als grobe Richtung: Es geht um eine MySQL abfrage innerhalb eines PHP-Skriptest, welches sich in dem Orion Board befindet.

    Dort gibt es einen Teil der folgendermaßen aussieht:

    Code:
     if (check_mysql_version()) 
                { 
                   $sql = "SELECT u.user_id, u.username, u.user_posts, Count(p.post_id) AS new_counter 
                      FROM " . USERS_TABLE . " u 
                         INNER JOIN " . POSTS_TABLE . " p ON u.user_id = p.poster_id 
                      WHERE u.user_id <> " . ANONYMOUS . " 
                      GROUP BY u.user_id, u.username, u.user_posts"; 
                } 
                else 
                { 
                   $sql = "SELECT u.user_id, u.username, u.user_posts, Count(p.post_id) AS new_counter 
                      FROM " . USERS_TABLE . " u, " . 
                         POSTS_TABLE . " p 
                      WHERE u.user_id = p.poster_id 
                         AND u.user_id <> " . ANONYMOUS . " 
                      GROUP BY u.user_id, u.username, u.user_posts"; 
                }
    Für was ist dieser Code gut?
    Kurz gesagt mit diesem Code werden die Beitragszähler neu berechnet.

    Weiter unten im Code werden die Werte dann, so glaub ich nur wieder an die entsprechenden Stellen in der Datenbank geschrieben.

    Bei meinem Problem handelt es sich um folgendes.
    Diese Abfrage soll nur Beiträge zählen die in Foren geschrieben sind, welche nicht in einem Array aufgeführt sind.

    d.h. Ich habe ein Array, welches ich vor der Abfrage generiere und so aussehen könnte:

    Code:
    spc_id = [3,4];
    Alle Foren die nicht in diesem Array sind können für die Zählung herangezogen werden, aber nicht die die in diesem Array stehen.

    Gibt es eine Möglichkeit den SQL Befehl derart anzupassen das dieses Problem gelöst wird?

    Danke schon mal im vorraus für eure Hilfe

    Grüße
    Daimonion

  • #2
    Re: MySQL befehl verstehen und umschreiben

    Original geschrieben von daimonion

    Gibt es eine Möglichkeit den SQL Befehl derart anzupassen das dieses Problem gelöst wird?
    und wie immer bekommt man von mir bei solchen Fragen immer ein einfaches:

    Ja

    Kommentar


    • #3
      Wie wäre es mit "AND NOT IN" an der richtigen stelle.. Damit lässt sich bei Google & Co ne menge finden.
      gruss Chris

      [color=blue]Derjenige, der sagt: "Es geht nicht", soll den nicht stoeren, der's gerade tut."[/color]

      Kommentar


      • #4
        @asp2php

        Wieso denn nur ein ja und nicht eventuell ne einfach Erklärung wo man da ansetzen könnte?

        @hhcm

        Danke für den Tipp.

        Jetzt brauch ich erst mal nur noch begreifen was das SQL statement genau macht um dann herauszufinden wo ich eventuell die Bedingung reinsetzen muß.

        Ich bin noch nicht wirklich fit mit diesen inneren Abfragen.

        Code:
        INNER JOIN " . POSTS_TABLE . " p ON u.user_id = p.poster_id
        Ich denke mal hier werden alle Beiträge gezählt die die userid geschrieben hat, oder?

        Ergo könnte dort ja auch das "AND NOT IN" hinein?!

        Danke für eure Tipps

        Grüße
        Daimonion

        Kommentar


        • #5
          Das: u.user_id <> " . ANONYMOUS . "

          ersetzen durch: u.user_id NOT IN( ".implode(',', $array).")

          Denk dran an der passende Stelle darauf zu achten, dass in Deinem Array auch was drin ist. Sonst gibbet lustige Fehler ;-)
          h.a.n.d.
          Schmalle

          http://impressed.by
          http://blog.schmalenberger.it



          Wichtige Anmerkung: Ich habe keine Probleme mit Alkohol ...
          ... nur ohne :-)

          Kommentar


          • #6
            So, nach langem Warten möcht ich hier nochmal antworten.

            @schmalle.

            Danke für den Tipp, werd ich mal so ausprobieren und berichten. Hoffe das dauert nicht wieder so lange..


            Edit:

            So, habe es geschafft... Hier nochmal der Vollständigkeit halber der geänderte Code

            Code:
            //no post count mod
            				//count only posts which are not in these forum_ids
            				$npc_id = $board_config['no_post_count_forum_id'];
            				$npc_id = explode(",",$npc_id);
            				$npc_str="";
            				foreach ($npc_id as $str) {
            					$npc_str .= " AND NOT p.forum_id = ". $str ." "; 
            				}
            				 
            				
            				// Updating new pm counter
            				if (check_mysql_version())
            				{
            					
            					$sql = "SELECT u.user_id, u.username, u.user_posts, Count(p.post_id) AS new_counter
            						FROM " . USERS_TABLE . " u
            							INNER JOIN " . POSTS_TABLE . " p ON u.user_id = p.poster_id
            						WHERE u.user_id <> " . ANONYMOUS . $npc_str ."
            						GROUP BY u.user_id, u.username, u.user_posts";
            				}
            				else
            				{
            					
            					$sql = "SELECT u.user_id, u.username, u.user_posts, Count(p.post_id) AS new_counter
            						FROM " . USERS_TABLE . " u, " .
            							POSTS_TABLE . " p
            						WHERE u.user_id = p.poster_id
            							AND u.user_id <> " . ANONYMOUS . $npc_str ."
            							
            						GROUP BY u.user_id, u.username, u.user_posts";
            				}
            Zuletzt geändert von daimonion; 09.07.2007, 12:36.

            Kommentar

            Lädt...
            X