|
| slette tilhørende poster Fra : Christoffer |
Dato : 06-05-05 21:00 |
|
Hej! jeg har atter brug for hjælp!
Jeg har rodet mig ud i at omskrive et forum, og sådan set færdig, mangler
bare en lille detalje, at man kan slette en overordnet tråd og de tilhørende
indlæg.. Det kan jeg ikke få til at fungere..
Må hellere ligge lidt kode så i kan se hvad jeg mener ..
forum.sql
CREATE TABLE forum (
id int(11) NOT NULL auto_increment,
header varchar(100) NOT NULL default '',
name varchar(60) NOT NULL default '',
email varchar(60) NOT NULL default '',
date datetime NOT NULL default '0000-00-00 00:00:00',
message text NOT NULL,
parent int(11) NOT NULL default '0',
PRIMARY KEY (id)
) TYPE=MyISAM;
Ideen er at kun tråde får data i header, mens indlæg til tråden ligger sig i
parent, og får tildelt værdien som tråden har.. så et indlæg til tråd med
id=9 får parent=9
Så meget logisk gik jeg ud fra at jeg kunne slette ved at lave normal delete
query
$query = "DELETE FROM forum WHERE id='$_GET[id]' and parent=$_GET[id]"; //
har prøvet at skrive parent='$_get[id]' og det gør ingen forskel.
Det virkede ikke.. den eneste måde jeg kan slette tråden på at ved at sætte
parent=0, men så er det kun tråden og ikke de tilhørende indlæg som bliver
slettet... Lidt af et problem.
Håber det var forståeligt, og at nogen kan hjælpe!
mvh.
Christoffer
| |
Bent Stigsen (07-05-2005)
| Kommentar Fra : Bent Stigsen |
Dato : 07-05-05 11:15 |
|
Christoffer wrote:
[snip]
> CREATE TABLE forum (
> id int(11) NOT NULL auto_increment,
> header varchar(100) NOT NULL default '',
> name varchar(60) NOT NULL default '',
> email varchar(60) NOT NULL default '',
> date datetime NOT NULL default '0000-00-00 00:00:00',
> message text NOT NULL,
> parent int(11) NOT NULL default '0',
> PRIMARY KEY (id)
> ) TYPE=MyISAM;
>
> Ideen er at kun tråde får data i header, mens indlæg til tråden ligger sig i
> parent, og får tildelt værdien som tråden har.. så et indlæg til tråd med
> id=9 får parent=9
>
> Så meget logisk gik jeg ud fra at jeg kunne slette ved at lave normal delete
> query
> $query = "DELETE FROM forum WHERE id='$_GET[id]' and parent=$_GET[id]"; //
> har prøvet at skrive parent='$_get[id]' og det gør ingen forskel.
[snip]
Hvis der kun er 2 niveauer, d.v.s. parent på et indlæg ikke kan være id
på et indlæg, så kan du nøjes med at bruge "or" istedet for "and" i din
where-clause.
$query = "DELETE FROM forum WHERE id=$_GET[id] or parent=$_GET[id]";
Hvis der kan være et vilkårligt underliggende antal niveauer, så må du
enten, loope igennem alle niveauer i php, eller skifte til InnoDB som
kan lave cascade delete.
/Bent
| |
Christoffer (07-05-2005)
| Kommentar Fra : Christoffer |
Dato : 07-05-05 11:27 |
|
har løst det.
//Query der sletter brugeren ud fra id
$query = "DELETE FROM forum WHERE id='$_GET[id]' and parent=0";
$slet = "DELETE FROM forum WHERE parent='$_GET[id]'";
//Udfører query
$result = mysql_query($query) or die("Query failed : " . mysql_error());
$indlaeg = mysql_query($slet) or die("Query failed : " . mysql_error());
Print "<META HTTP-EQUIV='Refresh' Content='3; Url=index.php'> <center><font
color='darkred'>Tråden er slettet'</font></center>";
Er ikke helt med på det avancerede php, så holder det så simpelt som muligt.
--
Christoffer
| |
Bent Stigsen (07-05-2005)
| Kommentar Fra : Bent Stigsen |
Dato : 07-05-05 12:51 |
|
Christoffer wrote:
> har løst det.
> //Query der sletter brugeren ud fra id
> $query = "DELETE FROM forum WHERE id='$_GET[id]' and parent=0";
> $slet = "DELETE FROM forum WHERE parent='$_GET[id]'";
>
> //Udfører query
> $result = mysql_query($query) or die("Query failed : " . mysql_error());
> $indlaeg = mysql_query($slet) or die("Query failed : " . mysql_error());
> Print "<META HTTP-EQUIV='Refresh' Content='3; Url=index.php'> <center><font
> color='darkred'>Tråden er slettet'</font></center>";
>
> Er ikke helt med på det avancerede php, så holder det så simpelt som muligt.
Det er ikke så avanceret endda. Jeg tror du mere tænker i sproglige
baner end matematisk logiske. Det kan du til dels godt udnytte, du skal
bare passe på hvordan du formulerer dit problem.
Fx. jeg kunne forestille mig, at du har tænkt noget i retning af:
Rækken som har id lig den valgte tråd *og* de rækker hvor parent peger
på den valgte tråd skal slettes.
"Og"'et kan ikke overføres til where-betingelsen i sql, fordi de
betingelser der er formuleret spænder over alle rækker, hvor i sql
kontrolleres betingelserne for hver enkelt række.
Betingelsen for den enkelte række kan formuleres:
En række skal slettes, enten hvis id er lig den valgte tråd, *eller*
hvis parent peger på den valgte tråd.
Og så får man det rigtige logiske "eller" i sql'en.
Evt. skriv et ar rækker ned på papir, regn ud betingelsen ud, og
kontroller at det stemmer overens med hvad du forventer.
+----+--------+-------------------+------------------+
| id | parent | id=1 and parent=1 | id=1 or parent=1 |
+----+--------+-------------------+------------------+
| 1 | 0 | 0 | 1 |
| 2 | 1 | 0 | 1 |
| 3 | 1 | 0 | 1 |
| 4 | 0 | 0 | 0 |
| 5 | 0 | 0 | 0 |
| 6 | 1 | 0 | 1 |
| 7 | 0 | 0 | 0 |
+----+--------+-------------------+------------------+
/Bent
| |
|
|