Question

J'ai beaucoup à plusieurs table relations et je dois supprimer les lignes inutiles. La structure de la table lastviews est:

| user (int) | document (int) | time (datetime) |

Ce tableau enregistre les derniers utilisateurs qui ont vu le document. (Utilisateur, document) est unique. Je montre que les 10 dernières vues d'un document et jusqu'à présent je supprimé le superflu comme ceci:

DELETE FROM `lastviews` WHERE `document` = ? AND `user` NOT IN (SELECT * FROM (SELECT `user` FROM `lastviews` WHERE `document` = ? ORDER BY `time` DESC LIMIT 10) AS TAB)

Cependant, maintenant je dois montrer aussi le dernier 5 documents utilisateur a vu. Cela signifie que je ne peux plus supprimer des lignes en utilisant la requête précédente, car il peut supprimer les informations dont j'ai besoin (par exemple un utilisateur ne considérait pas les documents en 5 minutes et les lignes sont supprimées)

Pour résumer, je dois supprimer tous les enregistrements qui ne sont pas dans les résultats de ces 2 requêtes:

SELECT ... FROM `lastviews` WHERE `document` = ? ORDER BY `time` DESC LIMIT 10

et

SELECT * FROM `lastviews` WHERE `user` = ? ORDER BY `time` DESC LIMIT 0, 5

J'ai besoin de la logique.

Était-ce utile?

La solution 2

Je ferme cette question. Je ne trouve pas la réponse que je cherchais, mais il a fini de faire une autre façon. J'ai décidé de supprimer ces enregistrements qui sont 2 jours donc il n'y aura pas de lignes non utilisées dans la base de données.

Autres conseils

peut un ou dans votre requête résoudre votre problème?

quelque chose comme ceci:

DELETE FROM `lastviews` WHERE `document` = ? AND (`user` NOT IN (SELECT * FROM (SELECT `user` FROM `lastviews` WHERE `document` = ? ORDER BY `time` DESC LIMIT 10) AS TAB) OR 'user' NOT IN (SELECT * FROM (SELECT 'user' FROM `lastviews` WHERE `user` = ? ORDER BY `time` DESC LIMIT 0, 5) AS TAB))

il devrait donc supprimer uniquement les enregistrements qui ne figurent pas dans les deux SELECT que vous avez besoin

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top