[MSSQL] Datensätze zählen fehlgeschlagen :(

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

  • [MSSQL] Datensätze zählen fehlgeschlagen :(

    Hi Leute,

    ich habe da ein (kleines) Problem mit mysql_num_rows

    Folgendes: Ich will alle Datensätze zählen lassen, die in der Datenbank vorhanden sind. Aber: Es sollen jedoch nur die jenigen immer zusammen gezählt werden, die im Feld eine 2 oder 4 haben

    Beispiel:

    id | nummer | titel
    --------------------------
    1 | 2 | Hallo
    2 | 4 | Hallo2
    3 | 4 | Hallo3
    4 | 2 | Hallo4
    5 | 4 | Hallo5

    Dabei sollte das dann so aussehen:
    3 mal die Nummer 4 wiedergeben (Hallo2, Hallo3, Hallo5)
    2 mal die Nummer 2 wiedergeben (Hallo, Hallo4)

    meine Seite besteht aus einer Navigation (die dynamscih ist) und einer Mainpage. Dabei muss die kid von der Navigiation mit der kkid von der mainpage übereinstimmen.

    habe es bis jetzt so geregelt. Hoffe Ihr versteht was ich will
    SELECT tm.kkid, tl.kid FROM table_main AS pm, table_left AS tl WHERE pm.kkid = tl.kid
    Leider gibt er die gesamte Datensatzanzahl raus Komm da nicht weiter Also: Hallo, Hallo2, Hallo3, Hallo4, Hallo5)

  • #2
    1. MSSQL != MySQL
    2. Count und Group by sollte dir helfen
    3. was sind table_main und table_left, die sind nirgends zu sehen => poste bitte zukünftig auch das, wovon du sprichst. Mit zusammenhangslose Gerede kann keiner was damit anfangen

    Kommentar


    • #3
      Also nochmal in Ruhe

      Es gibt zwei tabellen (MYSQL ):

      1. [table_main]
      -id
      -kkid
      -titel

      2. [table_left]
      -id
      -kid
      -titel

      Dabei muss die kid mit der kkid übereinstimmen (das hbe ich so gemacht: WHERE (table_left.kid = table_main.kkid))

      Funktioniert auch ganz gut alles

      So nun sollen alle Einträge in kkid geordnet gezählt werden:

      beispiel:
      id | kkid | titel
      -------------------
      1 | 4 | Main
      2 | 4 | Impressum
      3 | 2 | Links
      4 | 2 | Hot Links
      5 | 4 | Counter

      So nun sollen alle kkid mit 2 und 4 gezählt werden und angezeigt:

      Also: kkid = 4 (3x mal); kkid = 2 (2x mal)

      Habe es makl mit count probiert, aber der zählz jetzt nur kkid 4+2 zusammen also kommt 2 raus.

      Code: $anzahl = count(mysql_query("SELECT kkid FROM table_main GROUP BY kkid", $dblink));

      Was mache ich genau falsch, bzw tipps wären gut. danke!

      Kommentar


      • #4
        Ich sprach von MySQL-Funktion COUNT und nicht von php-Funktion.

        Probiere:
        PHP-Code:
        $sql 'select count(id) as cnt  from table_main group by kkid';
        $res mysql_query($sql,$dblink) or die(mysql_error());
        $row mysql_fetch_object($res);
        echo 
        $row->cnt
        EDIT:
        fehler korrigiert
        Zuletzt geändert von asp2php; 05.09.2004, 17:44.

        Kommentar


        • #5
          Bei deinem bekam ich eine Fehlermeldung (auch nach anpassung

          hier nun mal der code der ganzen datei, vielleicht ist dann noch besser zu verstehen :

          PHP-Code:
           $res mysql_query("select *, count(id) as countkkid 
          from table_main group by kkid"
          ,$dblink) or die(mysql_error());
           
          $row2 mysql_fetch_object($res);
           
          $result mysql_query("SELECT * FROM table_left ORDER BY 
          sortieren ASC"
          $dblink);
           while (
          $row mysql_fetch_array($result)) {
            echo
          '
             <tr>
              <td width="188" height="19" class="smallfont" background="images/cbg.gif">
              <img src="images/bullet.gif">
           
          <a href="index.php?kato=links&kid=' 
          $row["kid"] . '">
          <b>' 
          $row["titel"] . '</b></a>';
               
                echo 
          ' (' $row2 -> countkkid ')';
               
            echo 
          '</td></tr>';    
           }; 
          Die Einzelnen Navigationspunkte werden erfolgreich ausgelesen, nur hinter jedem Link steht jetzt nur eine 2. Muss ich bei der Schleife etwas ändern noch. Langsam bekommt das ganze aber eine Gestalt an, dank der Tipps... Sehe schon MySQL ist net so mein Fall
          EDIT:
          linebreak sponsored by asp2php. Bitte demnächst selbst dafür sorgen. Danke.
          Zuletzt geändert von asp2php; 05.09.2004, 17:55.

          Kommentar


          • #6
            nur hinter jedem Link steht jetzt nur eine 2. Muss ich bei der Schleife etwas ändern noch.
            das ist ja nicht mehr schön, was du hier fabrizierst

            benutze nen join, um die beiden tabellen zu verbinden ...

            poste mal bitte einen tabellen-dump, ... also alle befehle zum erstellen und füllen der beiden tabellen ... falls untenstehendes nicht funktioniert ...
            1. [table_main]
            -id
            -kkid
            -titel

            2. [table_left]
            -id
            -kid
            -titel
            Code:
            SELECT *, COUNT(kkid) counted
            FROM table_main m
            JOIN table_left l
            ON m.kkid = l.kid
            GROUP BY kkid
            was ergibt diese abfrage? im php_my_admin zb.?
            Die Zeit hat ihre Kinder längst gefressen

            Kommentar


            • #7
              hehe euer problemkind wieder

              PHP-Code:
              SELECT * , COUNTkkid counted
              FROM table_main m
              JOIN table_left l ON m
              .kkid l.kid
              GROUP BY kkid
              LIMIT 0 
              30 

              MySQL meldet



              You have an error in your SQL syntax near 'ON m.kkid = l.kid
              GROUP  BY kkid LIMIT 0, 30' 
              at line 3 
              heißt das schonmal was gutes?

              Kommentar


              • #8
                nicht so schlampig leute, wenn schon Alias eingesetzt, bitte auch entsprechend anwenden.

                @Mumubaer: du brauchst nur 3 Sachen, also bitte kein select * verwenden, denn das ist verschwenderisch
                Code:
                select l.kid, l.titel, count(m.id) as cnt 
                   from table_main m inner join table_left l
                      on m.kkid=l.kid 
                         group by m.kkid
                            limit 0,30

                Kommentar


                • #9
                  Wow also er zeigt jetzt folgendes an:

                  PHP-Code:
                  kid titel cnt  
                  -------------------------
                  Hot Links 
                  Links 
                  So werde dann mal versuchen das ins navi einzubauen... ansonsten falls ihr gleich mal einen vorschlag habt (php code steht etwas weiter oben von der navi), dann einfach posten...

                  aber danke schonmal für diesen tipp!


                  gruß mumu

                  Kommentar


                  • #10
                    Wollt nur bescheid geben das alles funzt! Vielen Dank Leute, habt mir sehr geholfen!

                    Kommentar


                    • #11
                      hmm habe doch noch ein kleines problem:

                      PHP-Code:
                      SELECT m.fidl.idcountm.id )  AS countfid
                      FROM table_message m
                      INNER  JOIN table_main l ON m
                      .fid l.id
                      WHERE 
                      $kid l.kkid )
                      GROUP  BY m.fid
                      ORDER  BY l
                      .id DESC
                      Es werden ja nur die Links angezeigt, die auch einen wert m.fid haben, wie kann ich das umgehen, dass er auch die werte zeigt, die keinen m.fid gesetzt haben? langsam verstehe ich die syntax schon, nur ich weiß jetzt nicht was ich genau ändern soll. denk das hat mit m.fid = l.id zutun.

                      Gruß mumu

                      Kommentar


                      • #12
                        langsam verstehe ich die syntax schon,
                        probiers mal mit nem RIGHT JOIN bzw. LEFT JOIN
                        Die Zeit hat ihre Kinder längst gefressen

                        Kommentar


                        • #13
                          das habe ich auch hier gefunden gehabt: http://www.w3schools.com/sql/sql_join.asp

                          aktueller code:
                          PHP-Code:
                          SELECT m.fid,l.idl.ptitel,l.kkidl.beschreibungcount(m.id) AS countfid FROM table_message m LEFT JOIN table_main l ON m.fid l.id WHERE ($kid l.kkidGROUP BY m.fid ORDER BY l.id DESC 
                          Also 3 von 5 Einträgen werden nur angezeigt, wobei die fehlenden 2 keine einträge in fid haben. jedoch sollen diese auch mit angezeigt werden. vielleicht hat noch jemand anderes eine idee..danke

                          gruß mumu
                          Zuletzt geändert von Mumubaer; 05.09.2004, 21:01.

                          Kommentar


                          • #14
                            probiers mal mit nem RIGHT JOIN

                            und sag bitte, in welcher tabelle was wo fehlen darf, ....
                            Die Zeit hat ihre Kinder längst gefressen

                            Kommentar


                            • #15
                              hehe next spam

                              Habe es fast fertig, nur diese verflixt (einfache) sache noch:

                              PHP-Code:
                              SELECT table_main.idtable_message.fidcounttable_main.id 
                              FROM table_main
                              LEFT  JOIN table_message ON table_message
                              .fid table_main.id GROUP BY table_main.id 
                              Nun werden zwar alle Angezeigt, nur die jenigen, die kein fid haben, bekommen eine (1) hingesetzt... Jedoch ist das ja leer und somit (0). Wie kommt das:

                              Ausgabe sieht so aus:

                              PHP-Code:
                              id fid counttable_main.id )  
                              ----------------------------------------



                              NULL <-- zeigt (1anaber soll (0sein!
                              NULL <-- zeigt (1anaber soll (0sein!
                              NULL <-- zeigt (1anaber soll (0sein

                              Kommentar

                              Lädt...
                              X