kombinierte abfrage

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

  • kombinierte abfrage

    ich arbeite an einem webkatalog. über die abfrage hier:

    PHP-Code:
    $query  mysql_query("SELECT COUNT(*) AS total FROM $AMLlinktbl WHERE categorie = '$printcatdata[id]'");
    $array  mysql_fetch_array($query); 

    lese ich aus der tabelle $MLlinktbl die links aus und zähle die unter $total.
    nun will ich aber auch die sub katagorien mitzählen. daher wollte ich ein abfrage einbauen die prüft ob in der Tabelle $AMLlinkcattbl in der spalte "topcat" die gleiche katagorien nummer steht.

    "" wenn unter topcat eine 4 steht bedeutet das, das dieses subkategorie zur hauptkategorie 4 gehört ""

    dann sollte er in der abfrage oben eben auch diese subdomain nach dem gleichen schema wie oben durchsuchen und alles in einer ! variablen ausgeben.


    verstanden was ich will ?
    besucht mich mal ...

  • #2
    hi cb master,

    also die sukategorien kannst du mit GROUP BY tomcat zaehlen. das query sollte dann so lauten:

    SELECT COUNT(*) AS total FROM $AMLlinktbl WHERE categorie = '$printcatdata[id]' GROUP BY tomcat;

    gruss

    pauino

    Kommentar


    • #3
      ne - geht nicht - ist wohl aber mein fehler. nochmal zu den tabellen.

      TABELLE 1
      ------------------

      $AMLlinkcattbl (nennt die sich) hier ist die spalte "topcat" wo die ID gespeichert wird (z.b. 4 für die topkategorie 4 eben)


      TABELLE 2
      -----------------

      $AMLlinktbl (anderer name !) hier werden die links gespeichert - wobei in der spalte "categorie " die zugehörige kategorie gespeichert wird (z.b. 4 für die topkatagorie 4 oder auch 27 für die unterkategorie von 4)


      so und nun geh ich hin und will alle links zählen die in eine kategorie gehören - aber eben auch die aus den unterkategorie sollen mitgezählt werden. wie mach ich das nun richtig ?
      besucht mich mal ...

      Kommentar


      • #4
        hmm,

        hmmm mysql ist nicht so meine staerke aber ich werde es trotzdem mal versuchen:

        also in der tabelle $AMLlinkcattbl speicherst du zu jeder categorie die topcat. und in der tabelle $AMLlinktbl speicherst du die links und die dazugehoerige categorie.
        wenn ich das richtig verstanden habe versuchs mal mit:

        SELECT COUNT($AMLlinktbl.link) AS total FROM $AMLlinktbl, $AMLlinkcattbl
        WHERE
        $AMLlinkcattbl.topcat = '$printcatdata[id]'
        AND
        $AMLlinkcattbl.categorie = $AMLlinktbl.categorie;

        hmm vielleicht ist es das aber ich bin mir nicht sicher ob ich dein problem durchschaut habe. wenn du das $AMLlinkcattbl.topcat = '$printcatdata[id]' weglaesst und stattdessen:

        SELECT COUNT($AMLlinktbl.link) AS total FROM $AMLlinktbl, $AMLlinkcattbl
        WHERE
        $AMLlinkcattbl.categorie = $AMLlinktbl.categorie
        GROUP BY $AMLlinkcattbl.topcat;

        schreibst kriegst alle count(links) fuer alle topcats...

        gruesse von robert

        Kommentar


        • #5
          ja ich häng auch das erste mal in einer datenbank ... ich will das am ende ja als variable haben. bisher steht da komplett:

          PHP-Code:

          $query  
          mysql_query("SELECT COUNT(*) AS total FROM $AMLlinktbl WHERE categorie = '$printcatdata[id]'");
          $array  mysql_fetch_array($query); 
          $array[total] ist dann der totale counter. nun wollte ich das so machen wie du sagst, also:


          PHP-Code:

          $query  
          mysql_query("SELECT COUNT($AMLlinktbl.link) AS total FROM $AMLlinktbl$AMLlinkcattbl WHERE $AMLlinkcattbl.topcat = '$printcatdata[id]' AND $AMLlinkcattbl.categorie = $AMLlinktbl.categorie;'");
          $array  mysql_fetch_array($query); 

          und bekomme eine fehlermeldung, das die 2. zeile mit dem $array falsch ist. ( Warning: Supplied argument is not a valid MySQL result resource )
          besucht mich mal ...

          Kommentar


          • #6
            oops - fehlermeldung ist nur ne format sache gewesen - korrekt mit " füsschen ist der code nun:

            PHP-Code:

            $query  
            mysql_query("SELECT COUNT(*) AS total FROM $AMLlinktbl$AMLlinkcattbl WHERE '$AMLlinkcattbl.categorie' = '$printcatdata[id]' AND '$AMLlinktbl.topcat' = '$AMLlinkcattbl.categorie'"); 

            aber er zählt die unterkategorien nicht mit. ich sehe das doch aber richti. ich zähle alles count(*) unter dem namen "total" von den tabellen $AMLlinktbl, $AMLlinkcattbl (wobei ich eigentlich nur in der $AMLlinktbl zähle) und prüfe dort:

            '$AMLlinkcattbl.categorie' = '$printcatdata[id]' (also wenn in der tabelle '$AMLlinkcattbl die spalte categorie der variablen $printcatdata[id] entspricht dann zählen und wenn in der tabelle $AMLlinktbl die spalte topcat gleich ist mit der categorienummer in der tabelle $AMLlinkcattbl dann auch.

            da könnte der fehler liegen. in der letzten tabelle soll er ja nicht zählen !!! wenn der letzte vergleich stimmt soll in die tabelle $AMLlinktbl zurück und die links zählen die diese unterkategorienummer verwenden ...

            verstanden ?
            besucht mich mal ...

            Kommentar


            • #7
              nee habe ich nicht verstanden,

              wir machen das jetzt mal mit konkreten beispielen:

              tabelle $AMLlinkcattbl:
              topcat / categorie
              4 / 27
              4 / 78
              5 / 66
              5 / 79
              tabelle $AMLlinktbl
              link / categorie
              l1 / 27
              l2 / 78
              l3 / 27l4 / 66
              l5 / 4

              und jetzt wollen wir zur kategorie 4 die anzahl der links in $AMLlinktbl
              zaehlen, die zu 4 gehoeren oder zu 27 oder 78 also vier oder?

              dann muesste meine abfrage von vorhin eigentlich funktionieren:

              SELECT COUNT($AMLlinktbl.link) AS total FROM $AMLlinktbl, $AMLlinkcattbl
              WHERE
              $AMLlinkcattbl.topcat = '4'
              AND
              $AMLlinkcattbl.categorie = $AMLlinktbl.categorie;

              . ich denke das muesste so funktionieren

              also wenn das nicht klappt, dann schick mir mal genau so ein beispiel. ich fuerchte immer noch ich habe das nicht ganz verstanden....

              gruss pau

              Kommentar


              • #8
                ok - so gehts noch nicht. also

                TABELLE: $AMLlinktbl (links)

                link|categorie|
                ..........................
                hundekuchen.de|26
                pustekuchen.com|8
                irren.de|4
                kaputt.net|4
                hierbinich.org|13

                TABELLE: $AMLlinkcattbl (kategorien)

                cat-id|topcat|
                ..........................
                26|4
                4|
                5|
                6|




                da wo nix steht ist es die topcat - da wo die |4 steht, ist 26 eine unterkategorie die zur topcat 4 zählt. es sind also hier in der katagorie 4 incl unterkategorien 3 links ( irren.de; kaputt.net und hundekuchen.de)

                linkaufbau:
                -------------

                + topcat 4
                ++ cat 26
                ++ cat 27

                + topcat 5
                ++ cat 37

                + topcat 11
                ++ cat 66
                ++ cat 97
                ++ cat 13


                in den topcats sollen nun alle links gezählt angezeigt werden.
                besucht mich mal ...

                Kommentar


                • #9
                  jo da haben wir dann auch das problem.

                  ist es moeglich in $AMLlinkcattbl fur die haupt-kategorien sich selbst als topcat einzutragen das waere das einfachste?

                  wenn nicht dann versuchs mit:

                  SELECT COUNT(*) AS total FROM $AMLlinktbl, $AMLlinkcattbl
                  WHERE
                  ($AMLlinkcattbl.topcat = '4' OR $AMLlinkcattbl.cat-id='4')
                  AND
                  $AMLlinkcattbl.categorie = $AMLlinktbl.cat-id;

                  also mit postgres gehts ....

                  mysql habe ich gerade nicht zu verfuegung.

                  gruesse von pau

                  Kommentar


                  • #10
                    mist - aber ich komm noch drauf. pass auf der part hier - die soll er zählen:


                    $AMLlinktbl.categorie = '$printcatdata[id]' (link mit categorie = 4)
                    $AMLlinkcattbl.topcat = '$printcatdata[id]' (wenn topcat = 4 >>> dann)
                    $AMLlinktbl.categorie = '$AMLlinkcattbl.id' (link aus topcat 4)


                    so dachte nun ich - is aber wieder mal nicht richtig


                    SELECT COUNT(*) AS total
                    FROM $AMLlinktbl, $AMLlinkcattbl
                    WHERE $AMLlinktbl.categorie = '$printcatdata[id]'

                    (bis hier geht alles super - aber dann)


                    AND $AMLlinkcattbl.topcat = '$printcatdata[id]'
                    WHERE $AMLlinktbl.categorie = '$AMLlinkcattbl.id')
                    besucht mich mal ...

                    Kommentar


                    • #11
                      kann man das nicht vielleicht auch über eine doppelt abfrage prüfen ? so in der art vielleicht ?

                      // erst einmal alle id´s lesen die in der topcat 4 sind - also tabelle AMLlinkcattbl spalte .id lesen wenn categorie = 4 ist //

                      $morecat = mysql_query("SELECT * FROM $AMLlinkcattbl.id WHERE categorie LIKE '4");


                      // hier möchte ich nun alle zählen die die 4 haben oder aus der abfrage oben zugehörig sind //

                      $query = mysql_query("
                      SELECT COUNT(*) AS total
                      FROM $AMLlinktbl
                      WHERE $AMLlinktbl.categorie = '$morecat' OR '4'
                      ");
                      $array = mysql_fetch_array($query);
                      besucht mich mal ...

                      Kommentar


                      • #12
                        wenn man nicht weiterkommt - das nervt !!! also so muß es eigentlich gehen:


                        SELECT COUNT(*) AS total FROM $AMLlinktbl, $AMLlinkcattbl
                        WHERE '$AMLlinktbl.categorie' = '4'
                        OR ('$AMLlinkcattbl.topcat' = '4' AND '$AMLlinktbl.categorie' = '26')



                        wenn
                        $AMLlinktbl.categorie' = '4' ist dann zählen
                        oder
                        ('$AMLlinkcattbl.topcat' = '4' dann ist die
                        '$AMLlinktbl.categorie' = '26' eine unterkategorie- dann auch zählen.

                        tut er aber nicht - warum ????????
                        besucht mich mal ...

                        Kommentar

                        Lädt...
                        X