Sélectionnez toutes les tables
J'ai beaucoup de tables dans ma base de données tous avec la même structure. Je veux choisir de toutes les tables sans avoir à tous les énumérer comme suit:
SELECT name FROM table1,table2,table3,table4
Et j'ai essayé mais cela ne fonctionne pas:
SELECT name FROM *
Est-il un moyen de sélectionner toutes les tables dans une base de données sans inscription chaque table dans la requête?
Vous avez probablement besoin de faire une union de votre solution ci-dessous peut être modifié pour créer une instruction sql dynamique qui va comme 'Select * from table1 union select * from table 2 de l'union..'
Désolé compagnon, mais cela sonne comme une très mauvaise application desing. Si vous avez des tables avec la même structure, vous devriez vraiment envisager de mettre vos données dans un tableau!
Désolé compagnon, mais cela sonne comme une très mauvaise application desing. Si vous avez des tables avec la même structure, vous devriez vraiment envisager de mettre vos données dans un tableau!
OriginalL'auteur dlaurent86 | 2010-08-26
Vous devez vous connecter pour publier un commentaire.
Il est très inutile en raison de une raison: quand vous avez environ 200 fichiers (cette situation est réelle, oui?) vous avez environ 200 tableaux. Et s'il y a de milliers de fichiers dans chaque répertoire, etc.. Dans quelques temps, vous devrez ralentir le traitement lors de la sélection de votre base de données soit pour acheter plus de ressources serveur.
Je pense que vous devriez changer votre structure de base de données: il suffit de commencer à partir de l'ajout de
parent_folder_id
colonne de votre tableau, après cela, vous pouvez mettre toutes vos lignes (fichiers et répertoires -- parce que le répertoire est un fichier de trop -- ici, vous pouvez ajoutertype
colonne à déterminer) dans une table.OriginalL'auteur Konstantin Likhter
Autant que je sache, il n'existe pas de caractères génériques pour sélectionner à partir de *toutes les tables. Je recommande la rédaction d'un
view
et puis appelezview
à la place (il vous permettra d'économiser de l'écriture les noms de tous les temps) – VoodooChildOriginalL'auteur VoodooChild
Cela signifie que vous ne devriez pas avoir beaucoup de tables avec la même structure.
Mais juste une table avec un champ de distinguer les différents types de données, quel qu'il soit.
Puis sélectionnez tous aurait pas de problème.
OriginalL'auteur Your Common Sense
J'ai trouvé une solution, mais je voudrais quand même savoir si il existe un moyen plus simple ou une meilleure solution.
Mais voici ce que je suis venu avec:
Je ne recommande pas cette approche, mais j'ai une astuce pour vous: php.net/implode
ouais ok j'ai été debout toute la nuit à essayer d'obtenir ce droit. et ma solution n'a pas fonctionné parce que quand j'ai essayé d'exécuter "SELECT nom from $ALL_TABLES " j'ai obtenu cette erreur"Erreur MySQL: #1052 - Colonne 'id' dans la liste des champs est ambiguë", donc j'ai fini par faire une table de recherche avec tous les fichiers à l'intérieur de la table et je viens de faire une recherche plein texte sur cette table
OriginalL'auteur dlaurent86
Sonne comme vous voulez UNION chaque table, de sorte que vous obtenez les résultats comme s'ils étaient une grande table. Vous aurez besoin d'écrire la requête en plein comme
Copie & pâte peut être votre ami ici.
Je suis curieux de savoir pourquoi vous avez beaucoup de tables différentes avec la même structure?
each directory has its own table
OMGSi votre requête est lent avec 5000 dossiers, il est temps de faire de l'indexation ou de la re-chose de votre structure de la table. La création d'un tableau pour chaque répertoire sera plus un problème de performance que d'avoir une seule table avec un bon index et le design.
Vous avez un grave défaut dans la conception de votre. Lorsque les requêtes get lent sur une table de seulement 5K records (qui est peanuts pour aucun moteur de base de données), vous devez optimiser votre structure d'une table(s) et des requêtes.
DrColossos - en plus je vais avoir 50 tables et je n'ai pas à dire les requêtes ont été lents désolé Mon script a été lente être parce que j'ai eu un scan.php script boucle sur tous les fichiers dans un répertoire et sous-répertoires à créer une vignette pour les fichiers jpg et les fichiers flv puis insérer un enregistrement dans la table de fichiers ce script serait également vérifier les fichiers dans la table de fichiers avec file_exists() si elle n'existait pas, il serait de supprimer l'enregistrement. et pour être honnête réfléchir à ce sujet maintenant, je ne sais pas pourquoi, j'ai décidé de créer une table pour chaque répertoire, je suppose que c'sembler une bonne idée à l'époque. mais maintenant, je scan 1 répertoire à un moment
OriginalL'auteur sasfrog