Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выбор с 2х таблиц / 9 сообщений из 9, страница 1 из 1
29.07.2014, 16:34:18
    #38708346
Freeman21
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор с 2х таблиц
Добрый день.
Есть две таблицы
t1 : productID, categoryID, *
и t2 : productID, categoryID, sort_order. В этой таблице идет связь один ко многим, т.е. t1.productID может быть сколько угоднов t2.productID

и запрос
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
SELECT 
  * 
FROM
  SS_products p 
WHERE (
    (
      p.productID IN (
        119,
        122,
        123,
        ...
        N
      )
    ) 
    OR (categoryID IN (310))
  ) 
  AND (enabled = 1) 
  AND p.`product_code` LIKE '%4051%'
ORDER BY p.sort_order,
  p.name 
LIMIT 0, 10 


как можно добавить сюда t2 и отсортировать по sort_order?
...
Рейтинг: 0 / 0
29.07.2014, 16:37:11
    #38708350
Freeman21
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор с 2х таблиц
Вижу с использованием left join, только если в условии указать on t1.productID = t2.productID, то результат строк уменьшается в N раз. Как-то с условием намудрить...
...
Рейтинг: 0 / 0
29.07.2014, 17:10:32
    #38708381
oaken
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор с 2х таблиц
Freeman21как можно добавить сюда t2 и отсортировать по sort_order?Не совсем ясно что нужно получить в результате, но в общем случае, с помощью inner (outer) join решается вопрос.
...
Рейтинг: 0 / 0
29.07.2014, 17:12:58
    #38708385
oaken
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор с 2х таблиц
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
SELECT 
  * 
FROM
  SS_products p 
[color=yellow]JOIN t2 p2 ON p.productID = p2.productID[/color]
WHERE (
    (
      p.productID IN (
        119,
        122,
        123,
        ...
        N
      )
    ) 
    OR (categoryID IN (310))
  ) 
  AND (enabled = 1) 
  AND p.`product_code` LIKE '%4051%'
ORDER BY p.sort_order,
  p.name[color=yellow],
  p2.sort_order[/color]
LIMIT 0, 10 

как-то так
...
Рейтинг: 0 / 0
31.07.2014, 13:40:07
    #38710004
Freeman21
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор с 2х таблиц
oaken,

Спасибо :)
...
Рейтинг: 0 / 0
31.07.2014, 13:48:54
    #38710012
Freeman21
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор с 2х таблиц
Если убрать limit 10, то выполнение скрипта составляет ~160 с. Можно как-то уменьшить этот показатель хотя бы в 50 раз?

EXPLAIN запроса показал:
id select_type table type possible_keys key key_len ref rows Extra1 SIMPLE p index_merge PRIMARY;IDX_PRODUCTS1 PRIMARYIDX_PRODUCTS1 4;5 \N 265 Using union(PRIMARY;IDX_PRODUCTS1); Using where; Using temporary; Using filesort1 SIMPLE p2 ref PRIMARY PRIMARY 4 cron4.p.productID 1 Using index
...
Рейтинг: 0 / 0
31.07.2014, 14:56:03
    #38710097
Users
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор с 2х таблиц
Freeman21,

like убрать вообще или сделать хотя бы '4051%' - тогда будет использоваться индекс по этому полю. Нельзя убрать - сделать эту выборку до этого запроса, сохранить id во временную таблицу, сделать по id индекс - в запросе сделать с ней джойн.
...
Рейтинг: 0 / 0
31.07.2014, 16:12:07
    #38710175
Freeman21
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор с 2х таблиц
Users,
ой, like, то частный случай... Его в запросе нет
...
Рейтинг: 0 / 0
31.07.2014, 17:21:13
    #38710242
Freeman21
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор с 2х таблиц
есть ли возможность сортировки пузырьком с некими измененными данными средствами SQL?
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выбор с 2х таблиц / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]