Formation Google AnalyticsSavez-vous bien utiliser les outils de mesure d'audience ?
Effectuez-vous un calcul de ROI (Retour sur investissement) pour savoir comment améliorer vos campagnes emarketing ?
Savez-vous utiliser les bons outils pour booster votre taux de transformation ?
La formation Web Analytics de Ranking Metrics, présentée par un expert reconnu officiellement par Google Analytics, vous apportera les réponses à toutes vos questions !
===> Informations et inscriptions.

Supprimer les enregistrements orphelins dans MySQL ?

Poster un nouveau sujet Imprimer cette discussion    Forum -> Administration d'un site Web   Les dernières discussions de ce forum sont disponibles au format RSS
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
 
Sébastien Night
Nouveau WRInaute

Inscrit le: 06 Avr 2007
Messages: 21
Localisation: Nantes

URL permanente de ce messagePosté le : Mer Avr 11, 2007 11:22    Sujet du message: Supprimer les enregistrements orphelins dans MySQL ?

J'ai appliqué sur un de mes forums phpBB (70 000 messages, une base de données trop grande pour l'hébergeur) ce script pour alléger les 2 000 000 d'enregistrements de ma table search_word_match.

Malheureusement, le mec qui a conçu ce script n'a pas eu le bon sens de penser à l'intégrité de la base de données. Du coup ça m'a foutu en l'air la logique de ma BDD. J'assume la responsabilité d'avoir appliqué le script sans sauvegarde, mais je suis quand même blasé.

J'explique :
Quand on écrit un post dans phpBB, celui-ci recense les mots contenus (en appliquant un filtre).
Ensuite les mots sont mis dans une table mots.
Puis pour chaque mot on crée un lien entre l'id du post et l'id du mot dans une table match.

Donc j'avais 120 000 mots et 2 000 000 de match
Le script me propose de choisir des mots à virer, j'ai viré tous les mots de moins de 3 lettres ainsi que les plus utilisés sur le forum (au moins 400 000 match de gagnés a priori).

Sauf que ce script supprime bêtement les mots en premier et les match ensuite. Donc comme chez moi, il a planté après avoir viré les mots, je suis pris au piège puisqu'il m'est impossible de retrouver les match "orphelins" !!!!! Evil or Very Mad

Ma question technique est donc :
Comment faire pour virer les éléments orphelins d'une table d'associations sous MySQL ?


Merci d'avance,
SBN
 
Sébastien Night Visiter le site web du posteur
arnaudmn
WRInaute accro
WRInaute accro

Inscrit le: 11 Mai 2005
Messages: 1423

URL permanente de ce messagePosté le : Mer Avr 11, 2007 11:31    Sujet du message: Supprimer les enregistrements orphelins dans MySQL ?

delete from table1
where not exists(select quelquechose from table2 where table1.unchamp = table2.unchamp)
 
arnaudmn Visiter le site web du posteur
Sébastien Night
Nouveau WRInaute

Inscrit le: 06 Avr 2007
Messages: 21
Localisation: Nantes

URL permanente de ce messagePosté le : Mer Avr 11, 2007 11:35    Sujet du message: Supprimer les enregistrements orphelins dans MySQL ?

Bon j'ai trouvé ce post et j'ai bidouillé la requete SQL de Suede.

Je crois que j'avance, j'arrive à compter les orphelins :
Code:

SELECT ls.word_id, ls.word_text, COUNT(wm.word_id) as entries
FROM `phpbb_search_wordmatch` as wm
LEFT JOIN `phpbb_search_wordlist` as ls ON ls.word_id=wm.word_id
WHERE ls.word_text IS NULL
GROUP BY wm.word_id
ORDER BY entries DESC
 
Sébastien Night Visiter le site web du posteur
Sébastien Night
Nouveau WRInaute

Inscrit le: 06 Avr 2007
Messages: 21
Localisation: Nantes

URL permanente de ce messagePosté le : Mer Avr 11, 2007 11:35    Sujet du message: Supprimer les enregistrements orphelins dans MySQL ?

arnaudmn a écrit:
delete from table1
where not exists(select quelquechose from table2 where table1.unchamp = table2.unchamp)

Des requêtes imbriquées sous MYSQL ? Je crois que c'est impossible !
Je vais quand même essayer.

Edit : j'ai fait le total, si j'arrive à tout virer ça va faire 648954 enregistrements en moins et je pourrai peut etre récupérer l'accès public à ma base Rolling Eyes (OVH l'a fermée en écriture !)

Re-edit :
Citation:
Nombre d'enregistrements effacés : 648954 (traitement: 31.7975 sec.)
requête SQL:
Code:
DELETE FROM `phpbb_search_wordmatch` USING `phpbb_search_wordmatch` AS wm LEFT JOIN `phpbb_search_wordlist` AS ls ON ls.word_id = wm.word_id WHERE ls.word_text IS NULL


Et j'ai gagné ..... 0 octets Shocked
 
Sébastien Night Visiter le site web du posteur
Suede
WRInaute accro
WRInaute accro

Inscrit le: 04 Oct 2002
Messages: 3658
Localisation: Suède

URL permanente de ce messagePosté le : Mer Avr 11, 2007 12:52    Sujet du message: Supprimer les enregistrements orphelins dans MySQL ?

Tu peux sinon vider les tables et reconstruire ton index grace à des mods.
 
Suede Visiter le site web du posteur
Sébastien Night
Nouveau WRInaute

Inscrit le: 06 Avr 2007
Messages: 21
Localisation: Nantes

URL permanente de ce messagePosté le : Mer Avr 11, 2007 13:03    Sujet du message: Supprimer les enregistrements orphelins dans MySQL ?

J'ai décidé de payer pour un quota de 100 Mo.

Edit : après optimisation de la table je n'ai gagné que 5 Mo au final.
 
Sébastien Night Visiter le site web du posteur
 
Montrer les messages depuis:   
Revenir en haut    Forum -> Administration d'un site Web Toutes les heures sont au format GMT + 2 Heures
Page 1 sur 1 - 
Connexion
Nom d'utilisateur:    Mot de passe:      Se connecter automatiquement à chaque visite    

CLIQUEZ ICI pour vous inscrire à WebRankInfo (forum, annuaire, outils...)

Connexion

© 2001-2005 phpBB Group, support français
Personnalisation : WebRankInfo ™


 ODP  Firefox  Alsacreations  annuaire webmaster Yagoort