У меня есть таблица, называемая, например, "node", из которой мне нужно вернуть значения, как показано:
SELECT nid FROM node WHERE type = "book"
После того, как я получу список значений, скажем:
|**nid**|
|123|
|12451|
|562|
|536|
Затем мне нужно взять эти значения и проверить другую таблицу, для строк, где столбец "путь" имеет значения как "node/123", "node/12451" (номера возвращенного предыдущего запроса) в одном присоединился запрос. Все было бы проще, если бы "дорожка" совпадала с простыми числами без "node/". А затем также подсчитайте количество идентичных i.e. 'node/123'. Конечный результат будет выглядеть следующим образом:
nid | path | count(path) | count(distinct path)
123 |node/123| 412 | 123
562 |node/562| 123 | 56
Работает нормально, если выполняется в нескольких раздельных запросах, но это не будет сделано.
select a.nid from node a join othertable b
on b.path = concat("node/", a.nid) where type='book'
Спасибо всем за вашу помощь. В основном проблема заключалась в том, что я не знал, как получить nid
и node/
вместе, но concat
помог.
Конечный результат выглядит примерно так:
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
Возможно, вы можете сделать что-то вроде следующего (nid
может потребовать дополнительного преобразования в некоторый тип строки):
SELECT *
FROM OtherTable
JOIN node ON path = CONCAT('node/', nid)
WHERE type = 'book'
count(distinct path)
может отличаться от 1 для данной пары nid / path?