J'écris un script qui obtient un nombre de lignes pour quelques tables, mais pour certaines tables, je veux seulement obtenir un nombre de lignes où un indicateur est défini (dans ce cas, actif = 1). Existe-t-il un moyen de le faire dans une seule requête?
Par exemple:
La table users
a une colonne appelée active
La table clients
n'a pas de colonne appelée active
Je veux obtenir un nombre d'utilisateurs où active = 1 et simplement obtenir un nombre de clients.
Avant de dire "juste du code dur", c'est une requête qui va dans un script python qui pourrait être exécuté sur de nombreuses bases de données différentes et je n'ai aucun moyen de savoir quelles tables mon script va sélectionner et si elles ont une colonne appelée active
, et Je préférerais avoir une seule requête pour tout faire au lieu de deux requêtes distinctes et compter sur mysql pour lancer une erreur, donc je sais utiliser l'autre.
Réponses:
Ma première pensée serait d'utiliser la
INFORMATION_SCHEMA
première, afin que vous sachiez (dans une requête pour toutes les tables de l'instance MySQL) quelles tables ont uneactive
colonne, puis utilisez ces informations pour construire vos requêtes. Et c'est probablement l'approche la plus sensée.Il existe cependant une autre méthode délicate qui fonctionne, que la table ait ou non une telle colonne:
Testé chez SQL-Fiddle Comment ça marche?
Si la table a une colonne nommée
active
, la requête est "traduite" comme si elle avait:Si la table n'a pas de colonne nommée
active
, la requête est "traduite" comme si elle avait:la source
Nombre de clients par ID utilisateur avec Grand Total utilisant uniquement le
users
tableau:Si la table des clients a supprimé des enregistrements, procédez comme suit:
Pour les
users
tables qui n'ont pas deactive
colonne:ou
Vous devez exécuter ces requêtes sur chaque base de données et
UNION ALL
les résultats.Si vous souhaitez exploiter la base de données INFORMATION_SCHEMA, voici une supposition sauvage:
Essaie !!!
la source
Je voudrais compléter la réponse du @ ypercubeᵀᴹ, mais je ne peux pas écrire de commentaires à cause des restrictions.
Si vous ne savez pas quel nom de colonne est utilisé et que vous devez obtenir sa valeur maximale, vous pouvez le faire:
la source