Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Правильно составить подзапрос / 7 сообщений из 7, страница 1 из 1
30.07.2014, 14:21:43
    #38709108
Seregas2014
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильно составить подзапрос
Добрый день, помогите или направьте в нужно направлении с запросов такого вида:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT `frk_item` . * , `frk_itemcomment` . *, 
CASE 
WHEN authorId=1 THEN 'Коля' 
END as idname, 
CASE 
WHEN projectId=12 THEN 'TEST' 
END AS grname 
FROM frk_item JOIN `frk_itemcomment` 
USING ( `itemId` ) 
WHERE frk_item.itemId in (SELECT itemId FROM frk_item WHERE `title` LIKE '%Скрипт рекурсивного мониторинга старых файлов в папках cache%' OR `description` LIKE '%Скрипт рекурсивного мониторинга старых файлов в папках cache%') OR frk_itemcomment.itemId in (SELECT itemId FROM frk_itemcomment WHERE `body` LIKE '%Скрипт рекурсивного мониторинга старых файлов в папках cache%') ORDER BY postDate DESC



Т.е есть две таблицы.
В первой содержаться : authorId, projectId, itemId
Во второй содержаться: itemId , body

Проблема этого запроса в том, что если body пустое, то возвращаемый результат - ноль значений (хотя это не правильно)
если body не пустое, то все замечательно отрабатывает

Нужно чтобы при body как пустом, так и не пустом выбирались значения.
...
Рейтинг: 0 / 0
30.07.2014, 15:10:36
    #38709154
Users
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильно составить подзапрос
Seregas2014,

left join поможет.
...
Рейтинг: 0 / 0
30.07.2014, 15:17:26
    #38709162
Users
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильно составить подзапрос
Seregas2014,

и еще: зачем сначала искать по таблице frk_item нужные id, а потом их подставлять как условие?
почему сразу не искать where like?

и еще: конкретные тормоза будут при использовании подобного подхода. like вообще операция тяжелая, а в этом случае еще и не будет использовать индекс. Причем я подозреваю, что индекса там и нет.

Разумнее что title, что description - вынести в отдельные таблицы, дать им id и при поиске использовать именно числовой id, а не текстовые значения.
...
Рейтинг: 0 / 0
30.07.2014, 15:21:45
    #38709172
Seregas2014
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильно составить подзапрос
Users, id нужны тоже (я их потом вывожу в массиве php)
Индекса нет нифига все верно.
...
Рейтинг: 0 / 0
30.07.2014, 15:26:52
    #38709182
Seregas2014
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильно составить подзапрос
Users,

Ты про left join имел ввиду так?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
SELECT `frk_item` . * , `frk_itemcomment` . *, 
CASE 
WHEN authorId=1 THEN 'Коля' 
END as idname, 
CASE 
WHEN projectId=12 THEN 'TEST' 
END AS grname 
FROM frk_item LEFT JOIN `frk_itemcomment` 
USING ( `itemId` ) 
WHERE frk_item.itemId in (SELECT itemId 
FROM frk_item 
WHERE `title` LIKE '%Скрипт рекурсивного мониторинга старых файлов в папках cache%' 
OR `description` LIKE '%Скрипт рекурсивного мониторинга старых файлов в папках cache%') 
OR frk_itemcomment.itemId in (SELECT itemId FROM frk_itemcomment 
WHERE `body` LIKE '%Скрипт рекурсивного мониторинга старых файлов в папках cache%') 
ORDER BY postDate DESC
...
Рейтинг: 0 / 0
30.07.2014, 15:30:56
    #38709188
Users
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильно составить подзапрос
Seregas2014,

В общем, лажа это все, коллега, без обид.


CASE
WHEN authorId=1 THEN 'Коля'
END as idname,
CASE

вот это подразумевает, что других id и нет, кроме Коли - во всех остальных случаях там будет Null.
Далее, завтра надо вместо Коли сделать Николай - полезем в код процедуры, его менять?

Должна быть отдельная таблица tbl_author в ней два поля - id_author, AuthorName

где каждому id соответствует имя.

далее:

select m.нужныеполя, a.AuthorName from mytable m
join tbl_author a on m.id_author = a.id_author -- если автор обязательное поле, если нет left join

И так везде. Ненормализованная база, так нельзя писать.
...
Рейтинг: 0 / 0
30.07.2014, 15:36:04
    #38709195
Seregas2014
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильно составить подзапрос
Users, конечно лажа я не спорю.
Процедуру менять в данном случае не нужно будет.
Поэтому такая лажа и делается.
В крайнем случае я могу менять ее через установку значений в переменных php.
Я не свой код пишу, я с готовой системой работаю, поэтому такие танцы тут идут.
Подумаю. Может стоит в отдельную таблицу писать еще это все.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Правильно составить подзапрос / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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