MySQL несколько соединений к одной таблице - PullRequest
1 голос
/ 29 марта 2012

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

+-----------+--------------------------+---------------------+
| unique_id | page_url                 | mod_date_stamp      |
+-----------+--------------------------+---------------------+
|      2378 | /resources/series75.html | 2008-10-03 22:49:00 |
+-----------+--------------------------+---------------------+

Затем другая таблица, сессия, подсчитывает количество обращений для набора до 5 URL-адресов, используя unique_id со страницы сеанса.

сессия

+-----------+---------+-----------------+-----------+---------------------+-------
| unique_id | counter | sequence_length | yearmonth | mod_date_stamp      | page1 | 
+-----------+---------+-----------------+-----------+---------------------+-------
|         1 |       2 |               2 |    201203 | 2012-03-28 15:42:38 |  5298 |  
+-----------+---------+-----------------+-----------+---------------------+-------

+-------+-------+-------+-------+
page2 | page3 | page4 | page5 |
+-------+-------+-------+-------+
6075 |     0 |     0 |     0 |
+-------+-------+-------+-------+

В данный момент программа статистики выбирает уникальный_ид со страницы сеанса для каждого URL, который занимает слишком много времени. Я хочу присоединить страницу сеанса обратно к сеансу несколько раз, чтобы в полях page1 - page5 отображался путь URL (или 0 / ноль), а не unique_id от страницы сеанса для ускорения работы программы.

Конечный результат должен выглядеть следующим образом:

+-----------+---------+-----------------+-----------+---------------------+-------
| unique_id | counter | sequence_length | yearmonth | mod_date_stamp      | page1 | 
+-----------+---------+-----------------+-----------+---------------------+-------
|         1 |       2 |               2 |    201203 | 2012-03-28 15:42:38 |  /path/index.html |  
+-----------+---------+-----------------+-----------+---------------------+-------

+-------+-------+-------+-------+
page2            | page3 | page4 | page5 |
+-------+-------+-------+-------+
/path3/disk.html |     0 |     0 |     0 |
+-------+-------+-------+-------+

Заранее спасибо.

1 Ответ

1 голос
/ 29 марта 2012

Исходя из вашего комментария, что page1, page2 .. являются столбцами внешних ключей, я думаю, это просто.

Что-то вроде:

SELECT 
    s.unique_id, s.counter, s.sequence_length, s.yearmonth, 
    s.mod_date_stamp,
    pg1.page_url as page1, pg2.page_url as page2, 
    pg3.page_url as page3, pg4.page_url as page4, 
    pg5.page_url as page5
FROM 
    session s
LEFT JOIN 
    sessionpage pg1 ON pg1.unique_id = s.page1 
LEFT JOIN 
    sessionpage pg2 ON pg2.unique_id = s.page2
LEFT JOIN 
    sessionpage pg3 ON pg3.unique_id = s.page3
LEFT JOIN 
    sessionpage pg4 ON pg4.unique_id = s.page4
LEFT JOIN 
    sessionpage pg5 ON pg5.unique_id = s.page5

Я думаю, это сработает.

Но когда в столбце нет значения (в сеансе таблицы), вы должны использовать ноль вместо 0 (ноль).

Еще один совет, касающийся оператора SELECT, если вы не хотите использовать значения NULL, вы можете использовать:

COALESCE(pg5.page_url, ' ') as page5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...