Punktzahl errechnen

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

  • Punktzahl errechnen

    Ich verwende folgenden Mysql-Query um die Punktzahl der User herauszufinden. Ich versuche es jedenfalls, aber es geht nicht.
    ES kommt nur folgender Mysqlfehler:
    You have an error in your SQL syntax near 'month(user.anmeldedatum),day(user.anmeldedatum)-time())*user.posts*0.001 as punk' at line 1
    Das ist der Query dazu:
    Code:
    select  rang.endpunkte, (year(user.anmeldedatum)month(user.anmeldedatum)day(user.anmeldedatum)-time())*user.posts*0.001 as punkte,
                                      rang.id, rang.name WHERE user.punkte between rang.anfangspunkte  and rang.endpunkte

  • #2
    fehlt da nich auf jeden fall ein FROM teil?
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar


    • #3
      was oder wo ist user.punkte steht das in der Tabelle oder berrechnest du das in der query ? wenn du es berrechnest kann du nicht where benutzt sondern muss having benutzt !

      gruss
      rth
      H I L F E
      GD FreeType Antialising
      Gesuch PHP Entwicklungsumgebung
      ------------------------------------------
      Der Cmabrigde rael tset, sruf whoin du wlilst

      Kommentar


      • #4
        user.punkte wird in der Query berechnet. Wo muss ich da having nehmen? Ich habe immer gedacht, dass HAVING ein ein erweitertes WHERE ist, das durch WHERE ersetzt wird, wenn WHERE nicht vorkommt.

        So, das ist jetzt das Query mit dem Fromteil:
        Code:
        SELECT  rang.endpunkte, (YEAR(user.anmeldedatum)MONTH(user.anmeldedatum)DAY(user.anmeldedatum)-TIME())*user.posts*0.001 as punkte, rang.id, rang.name
        FROM rang, user
        HAVING user.punkte between rang.anfangspunkte and rang.endpunkt

        Kommentar


        • #5
          Hm ich denke jetzt nur user.punkte in punkte umbennen (weil du mittels as punkte, den namen vergibst) und dann müsste das klappen.
          WEnn nicht dann bitte, die neue fehlermeldung mal posten.

          gruss

          rth
          H I L F E
          GD FreeType Antialising
          Gesuch PHP Entwicklungsumgebung
          ------------------------------------------
          Der Cmabrigde rael tset, sruf whoin du wlilst

          Kommentar


          • #6
            Klappt leider immer noch nicht.
            Das ist die neue Fehlermeldung:

            Fehlernummer: 1064
            Fehlermeldung: You have an error in your SQL syntax near 'month(user.anmeldedatum)day(user.anmeldedatum)-time())*user.posts*0.001 as punkt' at line 1
            Fehlerhafter Dump: select rang.endpunkte, (year(user.anmeldedatum)month(user.anmeldedatum)day(user.anmeldedatum)-time())*user.posts*0.001 as punkte, rang.id, rang.name FROM rang, user HAVING punkt between rang.anfangspunkte and rang.endpunkte

            EDIT:
            Wenn ich das MONTH, YEAR, DAY, TIME groß schreibe klappts auch nicht

            Kommentar


            • #7
              Code:
              (year(user.anmeldedatum)month(user.anmeldedatum)day(user.anmeldedatum)-time())*user.posts*0.001 as punkte
              Also so ganz check ich auch nicht was die berechnung soll ?
              Was mir auffällt ist
              time()
              ist php was du meinst ist vielleicht curtime() oder eher
              curdate()
              Ansonsten alles in klammern setzen was als as punkte gelten soll.

              Code:
              (CURDATE()-year(user.anmeldedatum)month(user.anmeldedatum)day(user.anmeldedatum))*user.posts*0.001) as punkte

              Aber um richtig helfen zu können bräuchte ich mal nen dump von der tabellenstruktur die du abfragst, und was genau das ergebnis sein soll .
              (also sowas wie "tage seitdem der user angelmedet ist, mal user.post mal 0.0001)

              gruss

              rth
              H I L F E
              GD FreeType Antialising
              Gesuch PHP Entwicklungsumgebung
              ------------------------------------------
              Der Cmabrigde rael tset, sruf whoin du wlilst

              Kommentar


              • #8
                Mit dem "... as punkte" will ich die derzeitige Punktzahl des Benutzers nach der Formal Zeit seit der Anmeldung * Beiträge * 0.001 berechenen. Das 0.001 soll nur bezwecken, dass die dabei herauskommenede Zahl nicht so groß ist. Die Punktzahl wird benötigt um den Rang des Benutzers herauszufinden.


                Struktur von der Tabelle USER:

                Code:
                CREATE TABLE `user` (
                  `id` int(11) NOT NULL auto_increment,
                  `name` varchar(100) NOT NULL default '',
                  `vorname` varchar(100) NOT NULL default '',
                  `nachname` varchar(100) NOT NULL default '',
                  `wohnort` varchar(100) NOT NULL default '',
                  `gruppe` int(11) NOT NULL default '0',
                  `status` int(11) NOT NULL default '0',
                  `anmeldedatum` datetime default NULL,
                  `passwort` varchar(50) NOT NULL default '',
                  `lastpost` datetime default NULL,
                  `gzip` int(2) NOT NULL default '0',
                  `posts` int(11) NOT NULL default '0',
                  `lastaction` timestamp(14) NOT NULL,
                  `sig` text NOT NULL,
                  `email` varchar(50) NOT NULL default '',
                  `aktiv` int(2) NOT NULL default '0',
                  `geburtstag` date NOT NULL default '0000-00-00',
                  `show_sig` int(1) NOT NULL default '0',
                  `show_email` int(1) NOT NULL default '0',
                  `show_pms` int(1) NOT NULL default '0',
                  `homepage` varchar(255) NOT NULL default '',
                  `aim` varchar(255) NOT NULL default '',
                  `icq` int(11) NOT NULL default '0',
                  `yahoo` varchar(255) NOT NULL default '',
                  `msn` varchar(255) NOT NULL default '',
                  `beruf` varchar(100) NOT NULL default '',
                  `interessen` varchar(100) NOT NULL default '',
                  `geschlecht` varchar(100) NOT NULL default '',
                  `online` int(1) NOT NULL default '0',
                  `freeid` varchar(50) NOT NULL default '',
                  PRIMARY KEY  (`id`)
                ) TYPE=MyISAM AUTO_INCREMENT=12 ;
                Sruktur von der Tabelle RANG:
                Code:
                CREATE TABLE `rang` (
                  `rangid` int(11) NOT NULL auto_increment,
                  `rangtitel` varchar(255) NOT NULL default '',
                  `anfangspunkte` int(55) NOT NULL default '0',
                  `endpunkte` int(55) NOT NULL default '0',
                  PRIMARY KEY  (`rangid`)
                ) TYPE=MyISAM COMMENT='Das ist die Tabelle mit den Rängen für die Punkteverteilung' AUTO_INCREMENT=1 ;

                Kommentar


                • #9
                  Zeit und Datum in MySql

                  gelesen ?

                  Ich denke EXTRACT ist die funktion die du brauchst

                  statt
                  PHP-Code:
                  year(user.anmeldedatum)month(user.anmeldedatum)day(user.anmeldedatum
                  das
                  PHP-Code:
                  EXTRACT(year_month_day FROM user.anmeldedatum
                  hast du eigentlich meinen query vorschlag von eben ausprobiert ? Und wenn ja wie lautet die Fehlermeldung ?

                  gruss rth
                  H I L F E
                  GD FreeType Antialising
                  Gesuch PHP Entwicklungsumgebung
                  ------------------------------------------
                  Der Cmabrigde rael tset, sruf whoin du wlilst

                  Kommentar


                  • #10
                    Ja hab ich, aber da stand nirgens was von EXTRACT(...)
                    Auch nicht in den Beispielen. Bezeihungweise hab ich diese seite nur bis zur Mitte durchgelesen, und nicht bis ganz unten, wo das mit dem Extract steht.

                    Jetzt kommt:
                    You have an error in your SQL syntax near 'year_month_day FROM user.anmeldedatum)*user.posts*0.001) as punkte, rang.id, ran' at line 1

                    Kommentar


                    • #11
                      HM um ehrlich zu sein ich bekommt die EXTRACT bei mir irgendwie auch nicht hin, naja was solls, gibt ja noch andere möglichkeiten, wie z.b.

                      PHP-Code:
                      ((TO_DAYS(CURDATE())-TO_DAYS(user.anmeldedatum))*user.posts*0.001) as punkte
                      So das hab ich jetzt auch ausprobiert, und das klappt.

                      gruss und guten morgen

                      rth
                      H I L F E
                      GD FreeType Antialising
                      Gesuch PHP Entwicklungsumgebung
                      ------------------------------------------
                      Der Cmabrigde rael tset, sruf whoin du wlilst

                      Kommentar


                      • #12
                        Ja geht

                        Besten Dank!
                        Ich hätte das alleine nicht so schnell gepackt!

                        mfg
                        Frank

                        Kommentar


                        • #13
                          freut mich

                          rth
                          H I L F E
                          GD FreeType Antialising
                          Gesuch PHP Entwicklungsumgebung
                          ------------------------------------------
                          Der Cmabrigde rael tset, sruf whoin du wlilst

                          Kommentar

                          Lädt...
                          X