Abfrage in einer Funktion vereinfachen?

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

  • #31
    Code:
    SELECT
                        c.did,
                        c.cid,
                        c.title
                        e.did,
                        e.aid,
                        e.bid
    FROM
                         c1 c
    INNER JOIN     
                         e1 e
                  ON 
                         c.did = e.did
    WHERE
                         c.cid > e.aid
         AND
                        c.cid >e.bid
    vielleicht? ich weiß nicht was du überhaupt vorhast mit $var.. aber maybe bietet sich auch IF () im SQL-Statement an...

    Es kommt nicht darauf an, mit dem Kopf durch den Monitor zu rennen,
    sondern mit den Augen das Manual zu lesen.

    Kommentar


    • #32
      Abfrage in einer Funktion vereinfachen?

      Hallo

      ich weiss nicht ob dies möglich ist ich hoffe schon.

      Ich habe mal folgende einfache Funktion geschrieben:

      PHP-Code:
      function DateLister() {
       global 
      $cache$catbit;
       if(!isset(
      $cache)) {
        
      $result mysql_query("SELECT catid, parentid, title FROM DatesCats");
        while(
      $row mysql_fetch_array($result)) {
         
      $cache[$row['parentid']][$row['catid']] = $row;
        }
       }
       if(
      is_array($cache) && count($cache)) {
        
      reset($cache);
        
      $childlist_count_temp=0;
        while(list(
      $key1$val1) = each($cache[$catbit])) {
         while(list(
      $key2$personenbit) = each($val1)) {
          
      $personen_result mysql_query("SELECT d.dateid, d.catid, d.title, 
      d.createtime, e.* FROM Dates d LEFT JOIN VisitParty e ON 
      (d.dateid=e.dateid) WHERE d.catid='
      $personenbit[catid]' AND 
      ((e.lastvisit IS NULL OR (d.createtime>e.lastvisit)))"
      );
          
      $newperson=0;
          while (
      $personen_row mysql_fetch_array($personen_result)) {
           
      $newperson++;
          }
          if(
      $newperson==0$b="";
          else 
      $b="Neue Person";
          
      $DateAusgabe.=$personenbit['title'].$b
         
      }
        }
       }
       return 
      $DateAusgabe;

      Gehen wir hier aus, das die Abfrage "SELECT catid, parentid, title FROM DatesCats" 250 Resultate Liefern würde.
      Dann würde es in der WHILE bei $personen_result .... 250 weitere "hoffentlich" unnötige Abfragen machen.
      e.lastvisit IS NULL ist drin, dass die Tabelle VisitParty nicht zu jedem eintrag ein Wert haben muss.

      Wie kann ich nun die zweite Abfrage einsparen, so dass ich auf das selbe ergebnis komme. Aus der Zweiten Abfrage benötige ich eigentlich keine Werte. Sie dient nur zur "Zählung".

      Ich habe dies mal in PHP Gepostet da es sich ja etwas um PHP und MySQL Handelt. Hoffe dies war richtig.

      Gruss

      kari_w

      Kommentar


      • #33
        ach nee, das ist ja das gleiche in grün, überlege doch mal, anstatt dauernd nachfragen
        EDIT:
        und dafür mußt du nicht einen neuen Thread öffen. **zusammenführen**
        Zuletzt geändert von asp2php; 22.11.2004, 18:49.

        Kommentar


        • #34
          Hallo

          Dachte ich auch erst das es das selbe in Grün ist.
          Aber egal wie ich es gemacht habe ich weiss nicht wie ich das so verarbeiten kann das ich nachher auch trotzdem die WErte $b habe.

          Das scheint was komplett anderes zu sein als die anderen Probleme von vorhin. Da ich ja noch die Bedingungen für $b habe.

          Gruss

          kari_w

          Seid bitte nicht böse auf mich. Bin schon froh das es ein Forum gibt wo auch Frauen mal ne Antwort bekommen. Aber ich komme hier wirklich nicht weiter.

          Kommentar


          • #35
            Moin allerseits.

            So ich habe nun gestern feierabend gemacht und bin nun wieder seit 2 Stunden dran. Ich habe die zuweite Abfrage Probiert in die erste zu kopieren und alles. Habe hier nochmals sämtliche beiträge in diesem Thread durchgelesen. Jedoch ist dies wirklich etwas anderes durch die Abfrage "if($newperson==0)". Ich komme einfach auf keinen Grünen Zweig mehr wie dies funktionieren könnte.

            Mir ist zwar unterdessen bekannt wie ich aus zwei Abfragen eine mache etc. Jedoch nicht wie ich eine Komplette Abfrage wo es um einen Zahlenwert geht in eine andere Abfrage bekomme und dies nachher doch per PHP auszuwerten.

            Ich benötige ja nur die Werte von
            PHP-Code:
            $result mysql_query("SELECT catid, parentid, title FROM DatesCats"); 
            Von der anderen Abfrage benötige ich eigentlich nur gibt es da einträge oder nicht zu einem Wert.

            gruss

            kari_w

            Kommentar


            • #36
              **seufz** mach mal so:
              PHP-Code:
              SELECT d.dateidd.catidd.titled.createtime
                     
              c.catidc.parentidc.titlee.* 
              FROM (Dates d INNER JOIN DatesCats c ON d.catid=c.catid
                   
              LEFT JOIN VisitParty e ON d.dateid=e.dateid 
              WHERE e
              .lastvisit IS NULL OR d.createtime>e.lastvisit 
              wie du d.catid/c.catid bzw. d.title/c.title ansprichst, mußt du selbst heraus finden.

              btw: es gibt keine Hilfe mehr in der Richtung! Wenn du weitere derartige Abfrage hast, mach selbst

              Kommentar


              • #37
                Hallo

                Wie schon gesagt ich habe diese Abfragen bereits zusammen gelegt wie ich auch oben geschrieben habe.
                Ich hatte ja shcon die Tipps mit INNER JOIN etc.

                Mir geht es um dass:
                if($newperson==0) $b="";


                Wie finde ich dies nun heraus.

                Gruss

                kari_w

                Kommentar


                • #38
                  Original geschrieben von kari_w

                  Mir geht es um dass:
                  if($newperson==0) $b="";
                  d.h. im Klartext: die Abfrage liefert nichts, also was wäre die Lösung?

                  Die Lösung ist:

                  Kommentar


                  • #39
                    Hm entweder reden wir aneinander vorbei oder ich weiss auch nicht.

                    Die Abfrage MUSS etwas liefern.
                    Und zwar dies:
                    $result = mysql_query("SELECT catid, parentid, title FROM DatesCats");

                    So müsste ich keine bedingung oder so haben.
                    Ich muss nur nachher dies rausfinden:
                    PHP-Code:
                    $personen_result mysql_query("SELECT d.dateid, d.catid, d.title, 
                    d.createtime, e.* FROM Dates d LEFT JOIN VisitParty e ON 
                    (d.dateid=e.dateid) WHERE d.catid='
                    $personenbit[catid]' AND 
                    ((e.lastvisit IS NULL OR (d.createtime>e.lastvisit)))"
                    );
                        
                    $newperson=0;
                        while (
                    $personen_row mysql_fetch_array($personen_result)) {
                         
                    $newperson++;
                        }
                        if(
                    $newperson==0$b="";
                        else 
                    $b="Neue Person"
                    Also dieses möchte ich dann herausfinden und wenn möglich eben in einer Abfrage. Jedoch brauche ich nur die daten die mri die abfrage jetzt schon liefert.

                    gruss

                    kari_w

                    Kommentar


                    • #40
                      ich habe so verstanden:

                      du wilst die beiden Abfragen:

                      "SELECT catid, parentid, title FROM DatesCats" und
                      "SELECT d.dateid, d.catid, d.title,
                      d.createtime, e.* FROM Dates d LEFT JOIN VisitParty e ON
                      (d.dateid=e.dateid) WHERE d.catid='$personenbit[catid]' AND
                      ((e.lastvisit IS NULL OR (d.createtime>e.lastvisit)))"

                      miteinander kombinieren, wobei die Bedingung:
                      d.catid='$personenbit[catid]' die Bedingung d.catid=DatesCats.catid
                      entspricht.

                      Ist das so?

                      Kommentar


                      • #41
                        Hmm Nicht ganz. Ich weiss nicht wie ich dies besser erklären kann. Ich Probiere es mal:

                        Die wichtigste Hauptabfrage ist diese:
                        PHP-Code:
                        $result mysql_query("SELECT catid, parentid, title FROM DatesCats"); 
                        Diese Abfrage soll genau so ausgeführt werden. Also nicht mit WHERE oder so beeinflusst werden. Ich brauche genau diese Werte aus dieser Abfrage.

                        Ich verarbeite dies weiter in ter WHILE schleife.

                        PHP-Code:
                        $personen_result mysql_query("SELECT d.dateid, d.catid, d.title, 
                        d.createtime, e.* FROM Dates d LEFT JOIN VisitParty e ON 
                        (d.dateid=e.dateid) WHERE d.catid='
                        $personenbit[catid]' AND 
                        ((e.lastvisit IS NULL OR (d.createtime>e.lastvisit)))"
                        );
                            
                        $newperson=0;
                            while (
                        $personen_row mysql_fetch_array($personen_result)) {
                             
                        $newperson++;
                            }
                            if(
                        $newperson==0$b="";
                            else 
                        $b="Neue Person"
                        Wie du siehst, ist dies im WHILE drin. Eine Abfrage die halt zu enorm vielen Abfragen dann führen würde, je mehr Kategorien sind. Und ich würde gerne die Abfrage zusammen legen, so dass sich aber die erste Abfrage nicht in der Funktion unterschiedet, und möchte dann dies:
                        PHP-Code:
                        if($newperson==0$b="";
                            else 
                        $b="Neue Person"
                        trotzdem Abfragen können.

                        Also das er mir dann bei den kategorien "Neue Person" anhängt wo die Bedingung passt von der zweiten Abfrage.

                        Das Zusammenlegen wäre so ja nicht das Problem. Das habt ihr mir ja super erklärt. Jedoch das zusamenlegen, so dass ich trotzdem alle Werte bez den kompletten durchgang habe wie bisher auch, und dass ich nachher trotzdem abfragen kann ob es bei DIESER Kategorie wo er grad am verarbeiten ist einträge gibt oder nicht.

                        Ich hoffe dies ist etwas genauer beschrieben was ich meine.
                        Wenn nicht sag doch bitte welches nicht ganz klar ist, dann probiere ich dies nochmals etwas genauer zu beschreiben.

                        Gruss

                        kari_w

                        Kommentar


                        • #42
                          und warum kannst du nicht von DatesCats LEFT JOINen auf Dates?
                          Ich denke, also bin ich. - Einige sind trotzdem...

                          Kommentar


                          • #43
                            Wenn ich dies so mache:

                            PHP-Code:
                            SELECT d.dateidd.catidd.titled.createtime
                                   
                            c.catidc.parentidc.titlee.* 
                            FROM (Dates d INNER JOIN DatesCats c ON d.catid=c.catid
                                 
                            LEFT JOIN VisitParty e ON d.dateid=e.dateid 
                            WHERE e
                            .lastvisit IS NULL OR d.createtime>e.lastvisit 
                            dann habe ich die auslese wo diese bedingung stimmt. Das ist korrekt. Jedoch geht er mir dann auch nur diese einträge aus DatesCats aus. Ich benötige aber alle einträge aus DatesCats und muss nachher einfach irgendwie abfragen können ob diese Kategorie aus DatesCats irgendwelche einträge mit dieser bedingung haben. Also die die ich eigentlich hier bisher einzel habe:

                            PHP-Code:
                            SELECT d.dateidd.catidd.title
                            d.createtimee.* FROM Dates d LEFT JOIN VisitParty e ON 
                            (d.dateid=e.dateidWHERE d.catid='$personenbit[catid]' AND 
                            ((
                            e.lastvisit IS NULL OR (d.createtime>e.lastvisit))) 
                            Gruss

                            kari_w

                            Kommentar


                            • #44
                              Original geschrieben von mrhappiness
                              von DatesCats LEFT JOINen auf Dates
                              und jetzt schau dir an, was du gemacht hast
                              Ich denke, also bin ich. - Einige sind trotzdem...

                              Kommentar


                              • #45
                                Original geschrieben von kari_w
                                Wenn ich dies so mache:

                                PHP-Code:
                                SELECT d.dateidd.catidd.titled.createtime
                                       
                                c.catidc.parentidc.titlee.* 
                                FROM (Dates d INNER JOIN DatesCats c ON d.catid=c.catid
                                     
                                LEFT JOIN VisitParty e ON d.dateid=e.dateid 
                                WHERE e
                                .lastvisit IS NULL OR d.createtime>e.lastvisit 
                                dann habe ich die auslese wo diese bedingung stimmt. Das ist korrekt. Jedoch geht er mir dann auch nur diese einträge aus DatesCats aus. Ich benötige aber alle einträge aus DatesCats und muss nachher einfach irgendwie abfragen können ob diese Kategorie aus DatesCats irgendwelche einträge mit dieser bedingung haben.
                                und wer hindert dich daran, aus INNER, LEFT bzw RIGHT zu machen

                                warum denkst du nicht ein bisschen nach?

                                Kommentar

                                Lädt...
                                X