Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: (PHP & MySQL) Oman foorumisoftan viestin poistaminen

pake10 [23.03.2010 14:13:38]

#

Tämä on nyt taas tällainen yksinkertainen (?) kysymys, eli miten poistaa viesti foorumisoftan taulusta niin, että viestien id:t ei sekaannu?

Taulut on siis näin:

1. bluebb_messages (id,poster,msg_topic_id)
2. bluebb_topics (id,subject)

Bluebb_messageissa siis nuo id:t on topikin viestien määrän mukaan, eli esimerkki;

[
bluebb_topics:
id = 1
subject = "Testi"
______________

id = 2
subject = "Testi2"
:
]
__________________________________________________

[
bluebb_messages:
id = 1
poster = "lol"
msg = "Testi"
topic_id = 1
___________________

id = 2
poster = "lol2"
msg = "Testi2"
topic_id = 1
___________________

id = 1
poster = "lolled"
msg = "Aihe 2"
topic_id = 2
___________________
:
]

Ymmärsitte varmaan periaatteen? Eli siis jos tuolta välistä otetaan yksi pois, id:t pitäisi järjestää uudelleen. Miten tuo pitäisi käytännössä toteuttaa? (siis id:eiden uudelleenjärjestys). Jotain tällaista olen yrittänyt tehdä: (mutta ei toimi, miettii kauan ja valittaa "Max execution time bla is bla")

<?php
$topic = $_GET["topic"]; // Topicin id
$id = $_GET["id"]; // Viestin id topikissa

mysql_query("DELETE FROM bluebb_messages WHERE topic_id='$topic' AND id='$id'");

$ids_exist = array();

$ids = array();
$sql = mysql_query("SELECT id, topic_id FROM bluebb_messages WHERE topic_id='$topic'");
$result = mysql_num_rows($sql);
$while_id = 0;

while($result2 = mysql_fetch_array($sql)) {
$ids_exist[$while_id] = $result2["id"];
    $while_id = $while_id + 1;
    }

    for($i = 0; $i < $result; $i++) {
    $ids[$i] = $i;
    }

    if(count($ids_exist) == count($ids)) {
    for($i = 0; $i < $ids_exist; $i++) {
    mysql_query("UPDATE bluebb_messages SET id='$ids[$i]' WHERE id='$ids_exist[$i]' AND topic_id='$topic'");
    }
    }
    ?>

Ideoita?

Sami [23.03.2010 14:24:44]

#

Miksi ID:t pitäisi uudelleenjärjestää?
ID:n on kuitenkin tarkoitus olla viestin yksilöllinen tunniste ja yleensä on myös suotavaa, että tämä tunniste ei koskaan muutu (jotta esimerkiksi linkitykset tai viittaukset viesteiin eivät hajoaisi ja lisäksi tämä vähentää huomattavasti virheiden riskiä).

pake10 [23.03.2010 14:29:00]

#

Sami kirjoitti:

Miksi ID:t pitäisi uudelleenjärjestää?
ID:n on kuitenkin tarkoitus olla viestin yksilöllinen tunniste ja yleensä on myös suotavaa, että tämä tunniste ei koskaan muutu (jotta esimerkiksi linkitykset tai viittaukset viesteiin eivät hajoaisi ja lisäksi tämä vähentää huomattavasti virheiden riskiä).

Ihan selkeyden kannalta. Mutta eihän noita kuitenkaan periaatteessa tarvitse järjestää, olisi vain selkeämpi.

Jonne [23.03.2010 14:33:23]

#

Käytithän tauluja luodessa AUTO_INCREMENT niin ei tarvitse omilla virityksillä välittää tuosta id:stä.

Metabolix [23.03.2010 14:33:50]

#

Kuvittele vaikka tilanne, jossa käyttäjä A muokkaa viestiä 10 ja käyttäjä B poistaa tällä välin viestin 5. Mitä tapahtuu, kun käyttäjä A yrittää tallentaa muutoksensa?

Jokainen ID kuuluu generoida tietokannan AUTO_INCREMENT-ominaisuudella ja säilyttää sitten muuttumattomana. Muuten järjestelmällä on suuri riski hajota tai ainakin toimia pahasti väärin.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta