Explode in sql bzw andere Möglichkeit?

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

  • Explode in sql bzw andere Möglichkeit?

    Ich habe für meine Website ein "Alert" System eingebaut, es werden also für bestimmte Aktionen von Usern Einträge in die Datenbank geschrieben.
    Beim Auswerten wollte ich, dass da nicht steht:
    "MrX hat in dein Gästebuch geschrieben."
    "MrY hat in dein Gästebuch geschrieben."
    "MrZ hat in dein Gästebuch geschrieben."
    sondern "MrX,MrY und MrZ haben in dein Gästebuch geschrieben."

    Da dachte es wäre praktisch, wenn man nicht immer einen neuen Eintrag macht für einen Eintrag, sondern den vorhandenen zu aktualisieren. Wenn also schon einer in dein GB geschrieben hat steht bei userid nicht mehr X sonder X,Y

    Somit muss ich nur noch 1 Eintrag auslesen und die Ids per explode trennen.
    1.Frage) Ist das überhaupt sinnvoll?

    Jetzt habe ich das Problem, dass ich nicht weiß wie ich den updaten soll, wenn jemand seinen GB-Einträg löscht. Eigentlich muss dafür nur das ,Y raus, aber dafür müsste man erstmal den Alert-Eintrag finden..

    Ich könnte natürlich nach allen Einträgen suchen immer per explode gucken ob die id dabei ist, aber das würde ewig dauern...
    2.Frage) Gibt es einige Möglichkeit in sql zu überprüfen ob die Id dabei ist? Like würde ja nicht gehen, weil bei "1" dann auch "10",etc gefunden werden würde...

    Ich wäre dankbar für eine schnelle Antwort ob das geht oder nicht. Wenn nicht, dann mache ich halt beim Auslesen mehrere Aufrufe

  • #2
    Ich wäre dankbar für eine schnelle Antwort ob das geht oder nicht.
    Auch wenn es gehen würde.....
    Die 5 Normal Formen
    Wir werden alle sterben

    Kommentar


    • #3
      Zitat von Spunk95 Beitrag anzeigen
      Da dachte es wäre praktisch, wenn man nicht immer einen neuen Eintrag macht für einen Eintrag, sondern den vorhandenen zu aktualisieren. Wenn also schon einer in dein GB geschrieben hat steht bei userid nicht mehr X sonder X,Y
      Nein, das wäre nicht praktisch.

      Beschäftige dich mit dem Stichwort Normalisierung.
      I don't believe in rebirth. Actually, I never did in my whole lives.

      Kommentar


      • #4
        Okay, danke für die schnellen Antworten, ich machs wieder wie vorher
        Mal sehn was es mit Normalisierung auf sich hat.

        Kommentar


        • #5
          Zitat von Spunk95 Beitrag anzeigen
          Okay, danke für die schnellen Antworten, ich machs wieder wie vorher

          Dieses:
          Wenn nicht, dann mache ich halt beim Auslesen mehrere Aufrufe
          ??
          Hört sich auch nicht gut an....
          A Visual Explanation of SQL Joins
          SQL und relationale Algebra

          Zitat von Spunk95 Beitrag anzeigen
          Mal sehn was es mit Normalisierung auf sich hat.
          Gute Idee!
          Wir werden alle sterben

          Kommentar


          • #6
            Danke für die Links. Aber ein Join ist hierbei ja nicht sinnvoll, weil es ja die gleiche Tabelle ist. Jetzt hole ich alle Alerts so raus:

            PHP-Code:
            $all_alerts mysql_query("SELECT alerts.*,users.name,users.is_mod,users.is_admin 
            FROM alerts,users WHERE uid = users.id 
            AND uid = '"
            .$userid."' AND alert_from != '".$userid."' ORDER BY date DESC LIMIT 0,10"); 
            Aber ich wüsste nicht, wie ich jetzt da noch einbauen kann, dass nur 1 Eintrag angezeigt wird mit 1/2/mehr Namen.

            Kommentar


            • #7
              PHP-Code:
              $arr_usernames = array();

              $all_alerts mysql_query("SELECT 
                alerts.*,
                users.name AS username,
                users.is_mod,
                users.is_admin 
              FROM 
                alerts, 
                users 
              WHERE 
                uid = users.id 
              AND 
                uid = '"
              .$userid."' 
              AND 
                alert_from != '"
              .$userid."' 
              ORDER BY date DESC LIMIT 0,10"
              );  
              while (
              $row mysql_fetch_array($all_alerts)) {
                
              // ..
                
              $arr_usernames[] = $row['username'];
                
              // ...
              }
              $zaehle_inhalt count($arr_usernames);
              $namen implode(", "$arr_usernames);
              echo 
              $namen
              if (
              $zaehle_inhalt >= 1) {
                echo 
              " haben";
              }
              else {
                echo 
              " hat";

              echo 
              " in dein Gästebuch geschrieben."
              Ungetestet!!

              Mal ganz davon abgesehen, dass ein JOIN hier sehr wohl Sinn machen würde und '*' im Normalfall zu vermeiden ist.

              Kommentar


              • #8
                Zitat von Spunk95 Beitrag anzeigen
                . Aber ein Join ist hierbei ja nicht sinnvoll, weil es ja die gleiche Tabelle ist.
                >>> FROM alerts,users
                Das sieht aber schon wie ein JOIN aus!
                Wir werden alle sterben

                Kommentar


                • #9
                  Zitat von combie Beitrag anzeigen
                  >>> FROM alerts,users
                  Das sieht aber schon wie ein JOIN aus!
                  Jaja, ihr schlauschnacker Ich meinte kein weiterer Join

                  @medium: Vielen Dank für den Code, hab ihn etwas angepasst und jetzt klappt es echt gut
                  Werde auch da * noch ausbaun.

                  Danke euch :=)

                  Kommentar

                  Lädt...
                  X