aide pour syntaxe sql [Réglé]
delete from
Support Général
aiglobulles Membre non connecté
Booster Missile
-
Booster Missile
- Voir le profil du membre aiglobulles
- Inscrit le : 15/08/2008
- Groupes :
j'essaye (via phpmyadmin) de supprimer les messages et topics de mon forum précédent la date du 01/01/2010 et appartenant à la catégorie 6 de ce dernier.
Ma syntaxe est la suivante:
Code SQL :
DELETE * FROM phpboost_forum_topics, phpboost_forum_msg WHERE idcat=6 AND timestamp<1262300400;
Cela me retourne l'erreur suivante:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '* FROM phpboost_forum_topics, phpboost_forum_msg WHERE idcat=6 AND timestamp<126' at line 1
Or, si j'utilise la même syntaxe mais avec un select en lieu et place du delete, tout se passe bien.
J'ai pourtant suivi les indications trouvées dans les guides référentiels de syntaxe sql, mais je ne vois pas ce qui bloque.
Quelqu'un peut m'aider ?
ElenWii Membre non connecté
-
Administrateur
- Voir le profil du membre ElenWii
- Inscrit le : 14/08/2009
- Site internet
- Groupes :
-
Equipe Graphique
ElenWii
aiglobulles Membre non connecté
Booster Missile
-
Booster Missile
- Voir le profil du membre aiglobulles
- Inscrit le : 15/08/2008
- Groupes :

en fait, j'ai reformulé ma requête car j'ai lu que la requête ne pouvait fonctionner si d'autres tables étaient liées à celles concernées par ma requête.
J'ai donc fait:
Code SQL :
DELETE FROM phpboost_forum_topics, phpboost_forum_msg, phpboost_forum_alerts, phpboost_forum_history, phpboost_forum_poll, phpboost_forum_track, phpboost_forum_view WHERE idcat = '6' AND TIMESTAMP < '1262300400';
et il me donne en retour...
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE idcat = '6' AND timestamp < '1262300400'' at line 1
janus57 Membre non connecté
-
Booster Fusée
- Voir le profil du membre janus57
- Inscrit le : 07/12/2007
- Groupes :
-
Equipe Assistance
normal car la colonne "idcat" et "timestamp" n'existe pas dans toute les tables sélectionné.
Si vous voulez vraiment le faire via requête SQL faut faire une requête pour "phpboost_forum_topics", une autre pour "phpboost_forum_msg" et ainsi de suite pour supprimer tous ce qui est en rapport les uns avec les autres.
Sinon vous pouvez toujours essayer : http://sqlpro.developpez.com/cours/sqlaz/jointures/
Cordialement, janus57
aiglobulles Membre non connecté
Booster Missile
-
Booster Missile
- Voir le profil du membre aiglobulles
- Inscrit le : 15/08/2008
- Groupes :
le problème c'est que les champs des tables n'ont pas le même nom.
dans mon cas je cherche à supprimer les topics et messages de la catégorie ayant pour id "6" et qui ont été posté avant le 1er janier 2010.
- phpboost_forum_msg
- phpboost_forum_topic
je ne vois pas comment faire deux requêtes distinctes puisque l'idcat est définie dans la table forums_topics alors que le timestamp est défini dans la table forum message ?
si je fais un select du genre:
Code SQL :
SELECT * FROM phpboost_forum_topics, phpboost_forum_msg WHERE idcat = 6 AND TIMESTAMP < 1262300400
mysql m sort tous mes messages et topics de la catégorie "6" et ayant été postés avant le 1er janvier 2010. Je ne vois pas comment faire autrement... si ça fonctionne pour le select, pourquoi cela ne fonction t-il pas avec le delete ?
aiglobulles Membre non connecté
Booster Missile
-
Booster Missile
- Voir le profil du membre aiglobulles
- Inscrit le : 15/08/2008
- Groupes :
Code SQL :
DELETE FROM phpoost_forum_topics WHERE idcat = 6 AND last_timestamp < 1338501600;
ça m'a supprimé plusieurs milliers de topics. Je consulte mon forum, et je vois qu'effectivement, après recompte des sujets et messages, tout semble en ordre.
Le soucis, c'est qu'au niveau BDD, le nombre d'entrées dans la table phpboost_forum_msg n'a pas bougé et est toujours de 184779. Je suppose donc que les messages sont toujours stockés dans la BDD mais n'apparaissent pas puisque ils n'ont plus de forum associé....
Du coup, ça ne résout aucunement mon souci qui était celui de réduire la taille de ma bdd.
Si quelqu'un a la possibilité de me filer un coup de main pour la bonne requête sql car j'avoue que je sais ne sais plus trop quoi faire et la lecture des guides que j'ai pu trouvé (y compris celui que janus a mis en lien) n'ont pas pu m'aider (jusqu'à présent)
d'avance merci pour votre aide, Bruno
aiglobulles Membre non connecté
Booster Missile
-
Booster Missile
- Voir le profil du membre aiglobulles
- Inscrit le : 15/08/2008
- Groupes :
la première, suppression des messages appartenant aux topics de la catégorie 6 et datant d'avant le 1 juin 2012:
Code SQL :
DELETE phpboost_forum_msg FROM phpboost_forum_msg, phpboost_forums_topics, phpboost_forum_cats WHERE phpboost_forum_msg.TIMESTAMP < 1338501600 AND phpboost_forum_msg.idtopic = phpboost_forum_topics_id AND phpboost_forum_topics.idcat = 6
@ vos souhaits
Donc si ça peut intéresser quelqu'un, ici on a appelé les messages dont le timestamp est inférieur à 1338501600 (nombre de secondes écoulées depuis le 1er janvier 1970) ensuite, on compare l'id du topic du message dans la table forums_msg et forum_topics puis, on s'assure que l'idcat du topic soit bien égal à 6.Deuxième requâte afin, cette fois-ci, de supprimer les topics dont les messages ont été supprimés:
Code SQL :
DELETE FROM phpboost_forum_topics WHERE last_timestamp < 1338501600 AND idcat = 6
Bon, normalement là c'est bon, en tous cas chez moi, ça marche et ma BDD a maigri de 50Mo... c'est déjà ça
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie