Select + delete

hello tous,

alors voila, je vais vous expliquer la situation que je veux faire:

  • Un formulaire HTML pour rajouter des choses dans une base Mysql
  • un script mysql qui va envoyer l’information de la base vers un fichier txt pour l’envoyer vers un script shell et l’utiliser
  • Une mise à jour de la base via le script mysql.

Pour le moment j’ai réussi à ecrire tous ça en PHP, donc no soucy, par contre, je dois pouvoir faire ça en SQL direct (ce que je ne sais pas faire, car pour le moment je fais 2 requêtes SQL via le script PHP…

L’idée est d’avoir un petit script de telechargement HTTP. Donc, via mon formulaire je met la Base de download à jour. Un script shell qui tourne tous les X temps sur le serveur va chercher l’info de la base de données et envois les infos dans un fichier TXT. Une fois les infos dans le TXT, il faut vider la table et utiliser le fichier txt comme input pour wget.

L’interface WEB d’ajout fonctionne sans problèmes, mais je me demande quelle requêtes SQL utiliser… Le script shell devrait ressembler à ça:


mysql < script_sql.sql > download.txt
wget -i download.txt

Mon code du fichier PHP pour affichier à l’ecran et effacer de la base ressemble à ça:


$result = mysql_query("SELECT * FROM downloader WHERE user='$user'");
while ($print_res = mysql_fetch_object($result))
{
	echo $print_res -> url . "<BR>";
	$user = $print_res -> user;
	$url = $print_res -> url;
	mysql_query("DELETE FROM downloader WHERE url='$url' AND user='$user'");
}

Si quelqu’un vois comment faire un truc semblable en SQL direct sans passer par PHP :slight_smile:

Merci d’avance :jap:

Si je comprend bien ton fichier php doit crée le fichier text avec la list des downloads, et supprimer ceux ci de la table à chaque fois qu’il sont ajouté dans le fichier en question ?
Edité le 24/01/2008 à 11:47

Tous à fait :slight_smile:

Pourquoi ne pas faire simplement deux requetes :
SELECT url FROM downloader WHERE user=‘123’;
DELETE FROM downloader WHERE user=‘123’;
Vu que les entrées trouvé par le select serons les même que celle du DELETE

J’y ai pensé, mais si user X rajoute justement des choses en BDD entre le SELECT et le DELETE, ça sera chaud non?

CREATE TEMPORARY TABLE `tmpDownloader` AS SELECT `url`,`user` FROM `downloader` WHERE `user`='123';
SELECT `url` FROM `tmpDownloader`;
DELETE a.* FROM `downloader` as a,`tmpDownloader` as b WHERE a.`user` = b.user and a.`url` = b.`url`;

Voilà ca evite le probleme que tu souleves, même si les risques était minime :smiley:
Edité le 24/01/2008 à 12:28

Oki, merci Pyro :slight_smile:

Vais essayer ça gentiment ce soir :wink: