INSERT INTO WHERE count(feld) <= 10

taurin

Erfahrenes Mitglied
Hallo,
ich versuche schon seit Stunden mein Problem zu lösen, bekomme es aber nicht hin.
Was ich versuche ist, etwas in ein DB-Feld zu schreiben, aber nur wenn vom gleichen wert noch nicht mehr als 10 vorhanden sind.
PHP:
$query = mysql_query("INSERT INTO tbl VALUES ('$1', '$2', '$3',) WHERE name <= 10");
Soll heißen, das ein die Tabelle nur 10 mal der name name stehen darf, ansonsten soll ein Fehler ausgegeben werden, wo es heißt das schon 10 namen vorhanden sind.
Wie kann es das jetzt realisieren? Über ein paar Tipps würde ich mich freuen.
lg
 
Also mit SQL alleine wird das sicherlich schwer ... aber ist machbar mit JOIN oder UNION *eins von beiden* in denen du dann als Query sowas schreibst wie "COUNT(SELECT name FROM tbl) <=10" oder so ähnlich.
 
Wie gesagt .. wie genau das geht weis ich jetzt nich ... musst du mal im MySQL-Handbuch nachlesen ... aber mit JOIN oder UNION geht das auf jeden Fall in einer Query.
 
Ich habe beide Methoden ausprobiert bin aber zu keinem Ergebnis gekommen. In der MySQL Doku steht das aber auch nur bei SELECT, als das UNION und JOIN. es gibt ja wohl INSERT SELECT, aber das bringt mich ja nicht weiter. Wie ich es jetzt auf jedenfall getestet habe war so:
PHP:
$query = mysql_query("INSERT INTO test VALUES ('', '$name', '$ge', '$alt') UNION (SELECT count(name) AS count, name FROM test WHERE name = '$name' GROUP BY name)");
Alleine so geht es schon nicht, und ich habe ja noch nicht die <=10 Abfrage mit drin.
Kann mir vllt noch jmd einen Tipp geben oder mir sagen, was ich falsch mache?
lg
 
Meiner Meinung nach ist die "richtige" Lösung für dein Problem ein TRIGGER (ON BEFORE INSERT). Deine Anwendung hat sich nicht um solche Details der Spezifikation zu kümmern. http://dev.mysql.com/doc/refman/5.1/en/create-trigger.html

Ansonsten könntest du das Problem in ein SELECT und ein INSERT aufteilen und das Ergebnis zuerst in der Anwendung prüfen. Beides muss aber in eine Transaktion, denn sonst könnte während der Prüfung des SELECT Ergebnisses bereits eine neue Zeile eingetragen werden.
 
Hmm schade ich dachte es gibt eine einfache Lösung das in einer Abfrage zu regeln. Dann werde ich wohl doch 2 nehmen müssen. Vielen dank euch beiden.
lg
 
Da lässt sich bestimmt was in einer Abfrage machen, aber das ist nicht schön.

Ungetestet

SQL:
INSERT INTO test
SELECT '', '$name', '$ge', '$alt' FROM test
WHERE name = '$name'
GROUP BY name
HAVING COUNT(*) < 10
 
Ja das geht, aber es gibt ein prob, es wird zwar aufgehört was rein zu schreiben wenn 10 erreicht ist, aber es macht es trotzdem. heißt also erschreibt nix rein aber doch wieder, womit ich keine meldung ausgeben kann das 10 erreicht ist.
Woran kann das liegen?
lg
 
Könntest du dich bitte etwas genauer ausdrücken ?
Erschreibt nichts rein ... aber doch ... und nein ... WAS genau macht er denn nun ?

Ich nehme an du meinst folgendes : es werden keine Daten in dern Datenbank geändert *also es wird nichts weiter hinzugefügt* aber er führt das Query trotzdem ohne Fehlermeldung aus. Meinst du DAS ? Oder doch ein anderes Fehlverhalten ?
Wenn es so ist wie ich geschrieben habe : einfach auf den RowCount der eingefügten Zeilen prüfen. Wenn dieser 1 ist wurde ein neuer Datensatz eingefügt. Ist er 0 so wurde KEIN neuer Datensatz eingefügt und auch keiner verändert.
 
Zurück