2013-05-04 3 views
-1

J'ai 8 tables ... supposons que x1, x2 ... x8. ces tables ont une structure similaire avec des champs tels que: id, contenu, pageview.Recherche de nom de table

Pageview compte le nombre de vues d'un identifiant particulier. Les messages sont stockés dans des lignes avec des identifiants particuliers.

Je veux trouver le premier article du top 10 sur la base de la page vue de ces 8 tables.

i utilisé:

$sql="select id,content from x1,x2,x3,x4,x5,x6,x7,x8 ORDER by pageview;" 

résultats vient up.ok! résultats sont comme supposons

Id contenu
13 c'est juste un 19 bien que dire .. .. . Dans ce résultat, je veux trouver cet ID: 19 appartient à quelle table? Je peux exécuter des boucles pour faire correspondre le contenu, mais ce ne sera pas assez rapide et bonne logique ..

aucune solution pour trouver le nom de table de particulier id?

Répondre

2

Votre exemple de requête ne sera pas exécuté tel quel si vous avez les mêmes noms de champs dans chaque table. Sans compter que vous produisez un produit cartésien puisque vous ne rejoignez aucun de vos champs.

Je pense que vous cherchez peut-être un UNION à la place:

select * 
from (
    select 'x1' as whichtable, id, content, pageview from x1 
    union 
    select 'x2' as whichtable, id, content, pageview from x2 
    ... 
    union 
    select 'x8' as whichtable, id, content, pageview from x8 
) t 
order by pageview 

Ensuite, vous pouvez utiliser le champ whichtable pour voir quelle table le résultat est venu.

Voici un exemple SQL Fiddle Demo.


Juste votre message relus, et si vous cherchez quelle table contient ID 19, vous pouvez ajouter une clause where à la requête ci-dessus:

select * 
from (
    select 'x1' as whichtable, id, content, pageview from x1 
    union 
    select 'x2' as whichtable, id, content, pageview from x2 
    ... 
    union 
    select 'x8' as whichtable, id, content, pageview from x8 
) t 
where id = 19 
order by pageview 
+0

@ user2320375 - pas de problème, heureux d'avoir pu aider! – sgeddes