Fehler beim erhöhen eines Datenbankeintrages

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

  • Fehler beim erhöhen eines Datenbankeintrages

    Hi,

    ich habe ein Problem mit mysql. Folgender Code schreibt Daten in 2 Tabellen, einmal erhöht es den Tagewert, und einmal schreibt es einen Eintrag in eine Tabelle, die, die letzten 250 User inc. Ip und Referer speichert. Doch komischerweise ist die Anzahl der Einträge in der Tabelle mit den Informationen größer als die Zahl der User/pro tag in der onlineuser_day-tabelle.


    PHP-Code:
    $if_ip_exist=mysql_query("SELECT IP,Time FROM onlineuser WHERE IP='$ip'",$link); 
    if(
    mysql_num_rows($if_ip_exist)) 
       
    mysql_query("UPDATE onlineuser SET Time='$current_time' WHERE ip='$ip'",$link); 
    else 

       
    mysql_query("INSERT INTO onlineuser (ip, time, Referrer) VALUES('$ip', '$current_time', '$url')"); 

       
    $day=date("Y-m-d",$current_time); 

       
    mysql_query("LOCK TABLES onlineuser_day WRITE,onlineuser_day READ",$link); 
       if(
    mysql_num_rows(mysql_query("SELECT User FROM onlineuser_day WHERE Date='$day'",$link))) 
       { 
            
    mysql_query("UPDATE onlineuser_day SET User=User+1 WHERE Date='$day'",$link); 
       } 
       else 
       {    
       
    mysql_query("INSERT INTO onlineuser_day (User, Date) VALUES('1', '$day')",$link); 
       } 

    Woran liegt das?

  • #2
    Kann mir niemand helfen?

    Kommentar


    • #3
      ich vermisse da ein UNLOCK...

      geht es nicht auch so?
      PHP-Code:
      mysql_query("UPDATE onlineuser SET Time='$current_time' WHERE ip='$ip'",$link);
      if (
      mysql_affected_rows()==0)
      {
        
      mysql_query("INSERT INTO onlineuser 
          (ip, time, Referrer) 
          VALUES('
      $ip', '$current_time', '$url')");
        
      $day=date("Y-m-d",$current_time);
        
      mysql_query("UPDATE onlineuser_day SET User=User+1 WHERE  Date='$day'",$link);
        if (
      mysql_affected_rows()==0)
          
      mysql_query("INSERT INTO onlineuser_day 
            (User, Date) 
            VALUES('1', '
      $day')",$link); 

      oder noch viel besser:
      Code:
      INSERT INTO onlineuser
        SET 
          ip=$ip,
          referrer=$url,
          time=NOW()
      dann hast du nur eine tabelle und kannst mit lustigen sql-funktion das machen, was du momentan in zwei tabellen machst
      Ich denke, also bin ich. - Einige sind trotzdem...

      Kommentar


      • #4
        Das unlock habe ich vergessen zu posten. Ich teste das jetzt mal einen Tag mit deiner Variante. Naja, die Tabelle wird mit deiner 2. Variante schnell ziemlich groß.

        Kommentar


        • #5
          Original geschrieben von BL_OfDragons
          Naja, die Tabelle wird mit deiner 2. Variante schnell ziemlich groß.
          nicht größer als deine zwei tabellen

          aber bei der 2. variante is der overhead geringer und du hast die ganze lock/unlock problematik nicht
          Ich denke, also bin ich. - Einige sind trotzdem...

          Kommentar


          • #6
            Naja, die eine Tabelle hat nur die eintäge des aktuellen Tages (der rest wird gelöscht)

            Kommentar


            • #7
              kannst Du doch auch so machen.
              mach einen cron der jeden morgen die daten von gestern konsolidiert und in deine andere tabelle schreibt und dann löscht
              Beantworte nie Threads mit mehr als 15 followups...
              Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

              Kommentar


              • #8
                Es funktioniert immer noch nicht

                Kommentar


                • #9
                  Original geschrieben von BL_OfDragons
                  Es funktioniert immer noch nicht
                  Es ist immer noch was falsch
                  Ich denke, also bin ich. - Einige sind trotzdem...

                  Kommentar

                  Lädt...
                  X