Avatar billede drinkit Praktikant
29. juli 2004 - 16:45 Der er 23 kommentarer og
1 løsning

Delete from table "ht_ting" hvis bruger ikke findes i table "sw".

Hvordan laver jeg en funktion i PHP, der sletter alt hvor "ejer" i tabellen ht_ting ikke findes som username i en anden tabel som hedder "SW".. Skriv endelig hvis i ikke forstår hvad jeg mener!

----------------Uddybning-------------------
Jeg har to tabeller.. Den ene hedder "ht_ting" den anden hedder sw..
alle mine brugere som er oprettet på min site bliver smidt ind i sw med deres bruger info.
Jeg har lige lavet en smart funktion:
<?
require("sys/sql.php");
$tid = time() - 5184000;
mysql_query("DELETE from sw where lastonline < '$tid'");
?>

Så jeg har fået slettet alle brugere i SW som ikke har været online de sidste 2 mnd.

Men nu skal jeg også have slette de ting de forskellige brugere havde i tabellen ht_ting..

Så hvordan sletter jeg alle ting i ht_ting, hvor username ikke findes i SW....?
Avatar billede detox Nybegynder
29. juli 2004 - 17:09 #1
Hvis du har en reference i de to tabeller (fx: 'id'):

DELETE ht_ting FROM ht_ting LEFT JOIN SW ON ht_ting.id = SW.id WHERE SW.username IS NULL

Husk at lave en backup for en sikkerheds skyld.
Avatar billede drinkit Praktikant
29. juli 2004 - 17:23 #2
forklar.. for jeg fatter hat + hat !
Avatar billede drinkit Praktikant
29. juli 2004 - 17:52 #3
en reference ?
Avatar billede detox Nybegynder
29. juli 2004 - 18:46 #4
Tja, et felt der er ens i begge tabeller. Men username må jo være det samme, så måske:

DELETE ht_ting FROM ht_ting LEFT JOIN SW ON ht_ting.username = SW.username WHERE SW.username IS NULL
Avatar billede drinkit Praktikant
29. juli 2004 - 18:55 #5
jeg har jo slettet username i den ene tabel.. så jeg skal slette alle ting i den anden tabel hvor ejer ikke findes som username..
hmm.. lad mig forklare..
Jeg har slette en masse brugere, og de brugere jeg slettede havde ting.. De ting har jeg ikke slettet.. da de ligger i et andet table.. så nu skal jeg have slettet alle ting, som ingen ejer har.. ergo, alle ting hvor ejer ikke findes som username i tabellen sw !
Avatar billede detox Nybegynder
29. juli 2004 - 19:13 #6
Men du har vel stadig kolonnen username i SW?
Avatar billede detox Nybegynder
29. juli 2004 - 19:14 #7
Har du prøvet forespørgslen? Du kan jo som sagt lave en backup først, så det ikke går helt galt.
Avatar billede detox Nybegynder
29. juli 2004 - 19:17 #8
hvis feltet hedder 'ejer' i ht_ting, skal det selvfølgelig rettes:

DELETE ht_ting FROM ht_ting LEFT JOIN SW ON ht_ting.ejer = SW.username WHERE SW.username IS NULL
Avatar billede drinkit Praktikant
29. juli 2004 - 22:19 #9
Det skader ik at prøve :P
Avatar billede drinkit Praktikant
29. juli 2004 - 22:19 #10
jeg laver bare en PHP fil med indholdet:
DELETE ht_ting FROM ht_ting LEFT JOIN SW ON ht_ting.ejer = SW.username WHERE SW.username IS NULL
og kører den.. eller kan jeg også bare smide det der ind i mysql ?
Avatar billede drinkit Praktikant
29. juli 2004 - 22:24 #11
Fejl
SQL-forespørgsel : 

DELETE ht_ting FROM ht_ting LEFT JOIN SW ON ht_ting.ejer = SW.username WHERE SW.username IS NULL

MySQL returnerede:


You have an error in your SQL syntax near 'ht_ting FROM ht_ting LEFT JOIN SW ON ht_ting.ejer = SW.username

Når jeg prøvede at smide det ind i Mysqls "Kør SQL forspørgsel(er) på database xup "
Avatar billede detox Nybegynder
30. juli 2004 - 04:27 #12
Måske fordi du bruger en ældre version af MySQL. Jeg tror først JOIN i DELETE forespørgsler er indført efter ver.4.0.
Avatar billede drinkit Praktikant
02. august 2004 - 14:09 #13
Velkommen til phpMyAdmin 2.2.3 - Men det har vel intet med min version af MySQL at gøre :P - Men hvad kan jeg så gøre ?
Avatar billede detox Nybegynder
02. august 2004 - 14:45 #14
MySQL versionen burde osse fremgå,. Men phpMyAdmin 2.2.3 er en ældre version, så måske er MySQL ligeså. Jeg ved ikke om det kan omgås i MySQL, men om ikke andet burde du kunne lave et php script, der gør det for dig. Fx:

$res = mysql_query("select username from SW");
while ($row = mysql_fetch_row($res)) {
    $users[] = $row[0];
}
$userstr = join("','", $users);
mysql_query("delete from ht_ting where ejer not in('$userstr')");
Avatar billede drinkit Praktikant
02. august 2004 - 17:16 #15
Det ser ud til at virke.. thx dude.. smid svar dér!
Avatar billede detox Nybegynder
02. august 2004 - 17:19 #16
Velbekommen
Avatar billede drinkit Praktikant
02. august 2004 - 18:10 #17
hmm dude.. det virker hat.. den slette en masse ting fra ht_ting.. hvor ejeren var at finde i Sw :S
Avatar billede detox Nybegynder
02. august 2004 - 20:41 #18
Ja, det var jo ikke meningen. Forhåbentlig var det bare en backup det gik ud over.
Har du husket apostrofferne her:
$userstr = join("','", $users);
Det er vigtigt at forespørgslen har det rette format alá:
delete from ht_ting where ejer not in ('bruger1','bruger2','bruger3')
Avatar billede drinkit Praktikant
02. august 2004 - 23:06 #19
jeg havde taget backup..
forstår ik helt hvad du mener, hvad skal jeg skrive der hvor der står bruger1 + 2 + 3 ? - jeg har jo over 5000 brugere i min DB! Kan ikke sidde og skrive dem ind manuelt..
Avatar billede detox Nybegynder
02. august 2004 - 23:23 #20
Jeg mener det er vigtigt at forespørgslen har den rette syntax, hvis den skal virke.
Du kunne jo tjekke det ud ved at lave en print af forespørgslen inden du kører den.
Altså:

$res = mysql_query("select username from SW");
while ($row = mysql_fetch_row($res)) {
    $users[] = $row[0];
}
$userstr = join("','", $users);
print("delete from ht_ting where ejer not in('$userstr')");
Avatar billede drinkit Praktikant
03. august 2004 - 00:11 #21
det er helt forkert det print den kommer med.. den printer en masse bruger navne, som allerede findes i SW..!
Avatar billede drinkit Praktikant
03. august 2004 - 00:11 #22
noget er galt i scriptet..
Avatar billede detox Nybegynder
03. august 2004 - 00:38 #23
Det var nu osse meningen. Formålet er jo at tjekke at syntaxen er rigtig.
Ser det sådan ud?:

delete from ht_ting where ejer not in ('bruger1','bruger2','bruger3',.....osv
Avatar billede drinkit Praktikant
06. december 2004 - 00:26 #24
fint.. lukket
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester