- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
SELECT SQL_CALC_FOUND_ROWS
`TLogindetails`.`name` AS `username`, `TLogindetails`.`firstname` AS `userfirstname`, `TOrders`.*,
`author`.`firstname` as `author_firstname`, `author`.`name` as `author_name`, `author`.`secondname` as `author_secondname`, `author`.`in_fio` as `author_in_fio`
FROM `TOrders`
LEFT JOIN `TLogindetails` ON `TOrders`.`user` = `TLogindetails`.`user`
LEFT JOIN `TLogindetails` as `author` ON `author`.`user` = `TOrders`.`author`
WHERE `TOrders`.`time` >= '1001322000' AND `TOrders`.`time` <= '1401872400'
AND (
IF(`TOrders`.`author` = 0,
`TLogindetails`.`name` LIKE '%Иванов%' OR `TLogindetails`.`firstname` LIKE '%Иванов%' OR `TLogindetails`.`secondname` LIKE '%Иванов%' OR `TLogindetails`.`in_fio` LIKE '%Иванов%',
`author`.`name` LIKE '%Иванов%' OR `author`.`firstname` LIKE '%Иванов%' OR `author`.`secondname` LIKE '%Иванов%' OR `author`.`in_fio` LIKE '%Иванов%'
) OR IF(`TOrders`.`author` = 0,
`TLogindetails`.`name` LIKE '%Иван%' OR `TLogindetails`.`firstname` LIKE '%Иван%' OR `TLogindetails`.`secondname` LIKE '%Иван%' OR `TLogindetails`.`in_fio` LIKE '%Иван%',
`author`.`name` LIKE '%Иван%' OR `author`.`firstname` LIKE '%Иван%' OR `author`.`secondname` LIKE '%Иван%' OR `author`.`in_fio` LIKE '%Иван%'
) OR IF(`TOrders`.`author` = 0,
`TLogindetails`.`name` LIKE '%Иванович%' OR `TLogindetails`.`firstname` LIKE '%Иванович%' OR `TLogindetails`.`secondname` LIKE '%Иванович%' OR `TLogindetails`.`in_fio` LIKE '%Иванович%',
`author`.`name` LIKE '%Иванович%' OR `author`.`firstname` LIKE '%Иванович%' OR `author`.`secondname` LIKE '%Иванович%' OR `author`.`in_fio` LIKE '%Иванович%'
)
)
AND ( `TLogindetails`.`name` LIKE '%Тестовый%' OR `TLogindetails`.`firstname` LIKE '%Тестовый%' OR `TLogindetails`.`secondname` LIKE '%Тестовый%'
OR `TLogindetails`.`in_fio` LIKE '%Тестовый%' OR `TLogindetails`.`name` LIKE '%физ%' OR `TLogindetails`.`firstname` LIKE '%физ%' OR `TLogindetails`.`secondname` LIKE '%физ%'
OR `TLogindetails`.`in_fio` LIKE '%физ%' OR `TLogindetails`.`name` LIKE '%лицо%' OR `TLogindetails`.`firstname` LIKE '%лицо%' OR `TLogindetails`.`secondname` LIKE '%лицо%'
OR `TLogindetails`.`in_fio` LIKE '%лицо%' )
AND `TOrders`.`paid` >= `TOrders`.`summ` AND `TOrders`.`status` = 10
ORDER BY `time` DESC
LIMIT 0, 20
Получаем первые 20 строк заказов, выбираем пользователя, оформившего заказ и если есть менеджера закрепленного за этим заказом плюс фильтр по поиску по дате, заказчику, менеджеру, номеру заказа и статусу заказа.
DBdev 05.06.2014 11:10 # +2
> LIKE...OR....LIKE...OR...LIKE...OR...LIK E
Фу-фу-фу.
А потом рассказывают, что запросы тормозят и единственное спасение - какой-нибудь сторонний фулл-текст сирёч движок.
bormand 05.06.2014 14:01 # 0
Одного like '%das%' вполне достаточно для лагов ;) А остальная пачка должна довольно шустро отработать - запись же уже в памяти.
DBdev 06.06.2014 13:42 # 0
Каждый LIKE через OR - это новый фул-тейбл скан ;)
Хотя, СУБД может и заоптимайзит всё в один скан. Но приятного мало.
bormand 06.06.2014 14:55 # 0
defecate-plusplus 06.06.2014 15:02 # +2
в этом треде не хватает пруфов с explain plan
bormand 06.06.2014 15:41 # 0
А вот разбивать фуллскан на несколько - что-то сомнительно... хотя всякое бывает.
bliznezz 16.06.2014 22:22 # +1
eth0 05.06.2014 19:34 # 0