WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   MySQL Max antal inlägg (https://www.wn.se/forum/showthread.php?t=1045601)

vidir 2010-12-29 11:24

MySQL Max antal inlägg
 
Undrar om man kan begränsa på något sätt kommentar inlägg i databas att det lagras bara 50 senaste, allt annat äldre raderas?

jonny 2010-12-29 11:34

Du behöver ju radera dem. Skapa en trigger som automatiskt raderar vid INSERT kanske?

vidir 2010-12-29 11:38

aha, i php scriptet,, undrade dock om det fanns en funktion man kunnde ställa in i t.ex. phpmyadmin eller något..

hnn 2010-12-29 13:01

Jonny menade triggers i MySQL

http://dev.mysql.com/doc/refman/5.0/en/triggers.html

Och ja, den kan du fixa i phpMyAdmin

KarlRoos 2010-12-29 13:05

Något som liknar detta bör lösa det:

Kod:

mysql> delimiter ;;
mysql> create trigger foo
-> after insert on entries
-> for each row
-> begin
-> DELETE FROM entries WHERE id < (SELECT min(id) FROM (SELECT id FROM entries ORDER BY id DESC LIMIT 50) AS myselect);
-> end
-> ;;

Observera att det är helt otestat.

Conny Westh 2010-12-29 14:10

Om du har svar eller kommentarer till ett inlägg som du raderar på detta sätt så kommer din databas att få tuppjuck efter ett tag, det är mao en mycket dålig idé att radera gamla inlägg i en tråd.

Däremot kan man radera gamla tådar om du raderar hela tråden.

Men frågan är om det är så btra det heller för ofta vill man kunna se gamla trådar, men det är en annan fråga.

F.ö. generade triggern följande fel:

Kod:

ERROR 1442: Can't update table 'entries' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.

SQL Statement:

INSERT INTO `test`.`entries` (`title`, `body`, `user_id`) VALUES ('1', '1', 1)

... har inte hunnit debugga ännu....

pelmered 2010-12-29 15:28

Tror inte man kan manipulera samma tabell som man har triggern på. Därav felet gissar jag.

Conny Westh 2010-12-29 23:07

Ja, jag har hittat fler som har upptäckt samma problem i MySQL. Andra tabeller verkar gå utmärkt att manipulera men inte just samma tabell. Söker dock vidare...


Hittade en referens som anger att det helt enkelt inte funkar att påverka eller ens läsa med SELECT från den tabell som triggern körs ifrån:

Citat:

Within a stored function or trigger, it is not permitted to modify a table that is already being used (for reading or writing) by the statement that invoked the function or trigger.
Ref: http://dev.mysql.com/doc/refman/5.0/...trictions.html


Alla tider är GMT +2. Klockan är nu 09:28.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson