Как связать таблицы по полям разных типов с разными данными

bubblegum

Новичок
Как связать таблицы по полям разных типов с разными данными

Имеется таблица логов с записями поле ури "/products/?id=55" и таблица goods
c полем id содержащим "55", а в результирующем наборе данных мне требуются:
distinct uri, count (uri) , goods.id, goods._еще_другие_поля group by uri
В руководстве mysql кажется написано, что объединение возможно по полям одинаковых типов.
Если кто-то знает, как такое провернуть, используя например реги в sql - подскажите плз!
я что-то туплю, не получается в общем )

еще такой вопрос - как сгруппировать записи "products/?id=55" и "/products/?id=55&SID=..."?
сам думаю, наверно, лучше вырезать сессию перед записью в логи

-~{}~ 08.01.06 10:58:

мне-то самому кажется, что на sql такое не получится, собираюсь сделать так: выборку
distinct uri, count(uri) where uri like '/products/id=%%' group by uri - во временную таблу,
потом пхп-скриптом добавить поле goods_id и заполнить его, и работать с этой таблой.
 

_RVK_

Новичок
bubblegum
Во-первых в Mysql есть REGEXP
Во-вторых добавь поле к новой таблице, запони его ID и связывай по нему. Новые записи добавляй уже в PHP выясняя id
 

bubblegum

Новичок
я как раз и спрашивал regexp для моего случая
* как его применить для группировки полей и SID и без
* как по нему связать с другой таблой и возможно ли?
у меня что-то не получаестя..
добавлять поля в логи не хотелось бы, таблица и так будет огромной
 

bubblegum

Новичок
пока пробовал вот так
//$sql="select distinct uri, count(uri) from stat where uri regexp '^/products/' group by url";

'^/products/' работает, но выдает еще и ненужные мне category=
'^/products/?id=' не работает
'^/products/\?id=' не работает
но это не в тему, просто эксперимент, то есть не то что мне нужно, а нужна группировка по regexp с sid и без
как сделать хотя бы прописывать знак "?" в реге ?

в лог пишутся все запросы, так что немаленькой... а ид не хочу записывать - теряется простота и универсальность, то есть писать еще кучу кода перед записью в лог, ведь ид есть не только в /продуктс/ но и в других разделах. Я хочу записываь просто request_uri, а анализировать уже на уровне отчета, а не записи в лог. Потом еще будет группировка по разным полям в товарах, их тоже из логов не выдернешь.

я уже решил задачку, с временной таблицей. Но про реги в
mysql хотел бы знать подробнее..
 

bubblegum

Новичок
Хороший ответ! особенно вот это: :)
bubblegum(1): ... используя например реги в sql ...
RVK (2): ... в Mysql есть REGEXP

Может, кто-нить кинет ссылки на статьи по регам в mysql, чтобы в ней примеры были, можно ли делать select regexp, where regexp, group by regexp...

вот эту курил http://www.kokos.ru/man_mysql/manual.ru_Regexp.html, не помогло
 

[Gisma]

Новичок
ну тогда нужно сделать обрамление в виде "<"_необходимый_id'>'
 

bubblegum

Новичок
2alpine
да, щас опробовал, интересный вариант с функциями. Но думаю, без регов не обойтись, надо сгруппировать по одинаковому иду с учетом сессий, и еще count .. придется повозиться )
 

alpine

Новичок
bubblegum
Я тут еще наваял запрос который выкусывает id=.* из url-лов
[sql]
SELECT IF (
INSTR( SUBSTRING( SUBSTRING( url, INSTR( url, '?' ) +1 ) , INSTR( SUBSTRING( url, INSTR( url, '?' ) ) , 'id=' ) ) , '&' ) , LEFT( SUBSTRING( SUBSTRING( url, INSTR( url, '?' ) +1 ) , INSTR( SUBSTRING( url, INSTR( url, '?' ) ) , 'id=' ) ) , INSTR( SUBSTRING( SUBSTRING( url, INSTR( url, '?' ) +1 ) , INSTR( SUBSTRING( url, INSTR( url, '?' ) ) , 'id=' ) ) , '&' ) -1 ) , SUBSTRING( SUBSTRING( url, INSTR( url, '?' ) +1 ) , INSTR( SUBSTRING( url, INSTR( url, '?' ) ) , 'id=' ) )
), url FROM logger
[/sql]

В 5ке можно оформить в качестве процедуры немного оптимизировать и вперед.
 

bubblegum

Новичок
2 alpine
да, я так себе и представлял запрос с разбором строки, уже и сам начал делать)
 

alpine

Новичок
Вариант с регекспом:
[sql]
SELECT * FROM products as p LEFT JOIN log as l ON( SUBSTRING( l.url, INSTR( l.url, '?' ) +1 ) REGEXP (CONCAT( '^(.*&_)_*id=', p.id, '(&.*)*$' )) )
[/sql]

-~{}~ 08.01.06 14:46:

только '_' заменить на '' а то какого-то хера смайлики в код тулит ... :(
 

bubblegum

Новичок
а я вот такую накропал
select (
if(instr(url,'?item='),
if(instr(url,'&')>0,
substring(url,instr(url,'?item=')+6,instr(url,'&')-instr(url,'?item=')-6),
trim(substring(url,instr(url,'?item=')+6,4))
)
,''
)
)item,
url
from stat
where url like '/products/?item=%%'

-~{}~ 08.01.06 15:59:

чой то min в этом месте не работает, приходится вместо min(a,b) писать if(a<b,a,b) а может, так и должно быть, а я sql хреново знаю. ))
 
Сверху