ist das schlau? Viel datensätze speichern mit schleife?

harderph

Erfahrenes Mitglied
Moinsen an alle!
ich habe mir ein PM system gebastelt für meine Community! Unteranderen ist dort auch ein bereich von wo man aus an freunde ein PM schreiben kann!
jetzt habe ich mir gedacht wieso nur an einzilne freunde schicken wenn man doch mehrere Freunde gleichzeitig eine PM schicken kann!
ich hab das mit einer schleife gelöst (eventuell)!
PHP:
$id_check = $_POST["checkbox"]; 
$suser = mysql_real_escape_string($_POST["username"]);
$uid = mysql_real_escape_string($_POST["uid2"]);
$titel = mysql_real_escape_string($_POST["titel"]);
$betreff = mysql_real_escape_string($_POST["pm_text"]);
//hier schleife generieren (ID_check = User-Id)
  for( $i = 0; $i < count( $id_check ); $i++ ) 
  { 
  //Zufällige generierung der PM-ID
  for($i1 = 0; $i1 < 1; $i1++)
{
    $Zufallszahl = rand(0, 10000000000);
    $Zufallszahl;
     
} 
//
//Hier nachrichten in DB Speichern
mysql_query("INSERT INTO briefkasten (piud, vuid, titel, betreff, datum, geloescht, gespeichert, gebannte_uid, ausgang, eingang, gelesen, post_id_var, ageloescht, art_pm) VALUES('".$id_check[$i]."', '$suser','$titel', '$betreff', NOW(), '0', '0', '0', '1', '1', '0', $Zufallszahl, '0', 'PM_TO_FRIEND')");


  }
echo 'Nachricht(en) wurden gesendent'.$ids.'' ;
Ist das jetzt eine gute lösung oder gibt es noch was besseres? Ich habe nämlich sorgen das wenn ein user 1000 freunde hat (mal angenommen) und er er alle makiert um eine pm zu schreiben
das dann die DB streikt oder irgendwas überlastet ist!
 
Um Datenredundanzen zu vermeiden, könntest du die Nachricht selbst auch nur einmal speichern und dann nur Leseberechtigungen ausstellen.
 
Du könntest auch die einzelnen Inserts zusammenfassen.

Eine weitere Sonderform von INSERT, die allerdings nicht kompatibel zum offiziellen SQL-Standard ist, ermöglicht es in MySQL , mit einem INSERT-Befehl mehrere Datensätze einzufügen:

INSERT INTO Artikel VALUES
('Faserstift', 'Stifty', 'Schreibersglück', 1),
('Faserstift', 'Stifty', 'Faserino', 2),
('Faserstift', 'Fasanetic', 'Fasano', 3);

Dann hättest du nur das Problem der maximalen Größe von Strings in PHP (keine Ahnung wie groß die Eigentlich ist). Mit mysql dürfte es da eigentlich keine Probleme geben, die maximale Größe des Querystring ist defaultmäßig auf 16MB bis 1GB eingestellt.http://lists.mysql.com/mysql/187971

ansonsten sehe ich da keine größeren Probleme, wenn du darauf achtest dass die Schleife auch terminiert.

Natürlich, eine eigene Tabelle mit Nachrichten, worauf die Tabelle "Briefkasten" referenziert ist die elegantere Variante.
 
Zuletzt bearbeitet:
Zurück