2009-12-03 6 views
0

J'ai une table, appelé par exemple « noeud », dont je dois retourner des valeurs pour comme indiqué:plusieurs tables Mysql sélectionnez

SELECT nid FROM node WHERE type = "book" 

Après obtenir une liste de valeurs disons:

|**nid**| 
|123| 
|12451| 
|562| 
|536| 

Alors je dois prendre ces valeurs, et vérifier une autre table, pour les lignes où la colonne « chemin » a des valeurs comme « noeud/123 », « node/12451 » (numéros la demande précédente retourné) dans un demande jointe. Tout serait plus facile si le 'chemin' de la colonne avait des nombres simples, sans le 'nœud /'. Et puis comptez également le nombre de identiques, c'est-à-dire 'node/123' retourné. résultat final ressemblerait à ceci:

nid | path | count(path) | count(distinct path) 
123 |node/123| 412  |  123   
562 |node/562| 123  |  56 

fonctionne très bien si elle est faite dans plusieurs requêtes séparées, mais qui ne le fera pas.

+0

Comment 'count (chemin distinct)' être différent de 1 pour une paire JNV/chemin donné? – Romain

Répondre

1
select a.nid from node a join othertable b 
on b.path = concat("node/", a.nid) where type='book' 
0

Vous pouvez probablement faire quelque chose comme ce qui suit (nid peut nécessiter une conversion supplémentaire à un certain type de chaîne):

SELECT * 
FROM OtherTable 
JOIN node ON path = CONCAT('node/', nid) 
WHERE type = 'book' 
0

Merci à tous pour votre aide. Fondamentalement, le problème était que je ne savais pas comment obtenir nid et node/ ensemble, mais concat aidé. Le résultat final ressemble à quelque chose comme:

SELECT node.nid, accesslog.path, count(accesslog.hostname), count(distinct accesslog.hostname) 
    FROM `node`, `accesslog` 
    WHERE node.uid=1 
    AND node.type='raamat' 
    AND accesslog.path = CONCAT('node/', node.nid) 
GROUP BY node.nid 
Questions connexes