2010-11-04 5 views
0

J'ai écrit le code ci-dessous comme exemple pour chercher à partir de différentes tables MySQL MyISAM et je ne peux pas utiliser UNION pour compter et seule la première valeur devient correcte et l'autre est vide.Comptage de tables différentes dans les tables MySQL MyISAM

En fait, qui est le premier et c'est parce que j'ai entendu mes tables sont MyISAM.

(SELECT COUNT(*) AS userCount from table_users) 
UNION 
(SELECT COUNT(*) AS totalposts from table_stories) 

Alors, quelle est la solution?

+0

Quels résultats attendez-vous? J'ai juste essayé votre requête et cela fonctionne comme prévu avec les tables MyISAM et INNODB. Et pourquoi utiliser des alias ici? – a1ex07

+0

Ce que j'attend de cette requête: 2 lignes de données, une avec userCount de n, et totalposts de NULL, et une deuxième ligne avec userCount de NULL et totalposts de m (où m et n sont vos comptes). Si vous voulez une seule colonne avec les deux résultats, les sélections qui composent votre union doivent avoir le même nom de colonne. –

+0

question, puisque ne pas utiliser where, group, join, une simple recherche sur 'Rows' sur' SHOW TABLE STATUS' fait tout exactement, ou non? – ajreal

Répondre

1

Si vous voulez les deux résultats dans la même ligne, vous pouvez utiliser des sous-requêtes pour cela. Cas de test:

CREATE TABLE table_users (id int) ENGINE=MYISAM; 
CREATE TABLE table_stories (id int) ENGINE=MYISAM; 

INSERT INTO table_users VALUES (1), (2), (3); 
INSERT INTO table_stories VALUES (1), (2), (3), (4), (5), (6); 

SELECT (SELECT COUNT(*) from table_users) userCount, 
     (SELECT COUNT(*) from table_stories) totalposts; 
+-----------+------------+ 
| userCount | totalposts | 
+-----------+------------+ 
|   3 |   6 | 
+-----------+------------+ 
1 row in set (0.00 sec) 

Si d'autre part, vous voulez que vos résultats dans des lignes distinctes, la requête que vous utilisiez devrait fonctionner aussi bien:

(SELECT COUNT(*) AS count_value from table_users) 
UNION 
(SELECT COUNT(*) from table_stories); 
+-------------+ 
| count_value | 
+-------------+ 
|   3 | 
|   6 | 
+-------------+ 
2 rows in set (0.02 sec) 
+0

wow, votre première requête a bien fonctionné, mais je ne sais pas pourquoi le second n'est pas! ???? –

+0

@Mac: obtenez-vous une ligne 'NULL' pour la deuxième requête? –

Questions connexes