Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Составить SQL запрос для получения поля из строки по условию и другого поля из следующей строки
Покинул форум
Сообщений всего: 114
Дата рег-ции: Дек. 2015
Помог: 3 раз(а)
Доброго всем дня. Проблема в следующем, есть таблица поля которой id - первичный ключ с автоинкриментом и уникальное текстовое поле. нужно получить id по текстовому полю и выдать текстовое поле из следующей записи. в данный момент выглядит примерно так:
SELECT text FROMTABLEWHERE id ><ранее полученный id>ORDERBY id ASCLIMIT1
id текущей записи тоже необходимо получить для дальнейших действий
Возможно ли запихать все это в один запрос и будет ли это быстрее работать чем 2 отдельных запроса? Для работы с БД используется mysqli (Добавление)
upd. И как это лучше реализовать/оптимизировать? (Добавление)
upd2 и да, реализовать нечто подобное мне все же удалось:
SELECT id,(SELECTDISTINCT id FROMTABLEWHERE text ='text')AS old_id, text FROMTABLEHAVING old_id < id ORDERBY id ASCLIMIT1
Но:
1. если верить профилировщику mysql это работает медленне чем 2 отдельных запроса
2. присутствует лишний id следующей записи от которого мне так и не удалось избавиться.
В mysql не силен, поэтому просьба сильно не пинать.
OrmaJever
Отправлено: 11 Марта, 2016 - 14:10:17
Активный участник
Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010 Откуда: Чернигов
Помог: 299 раз(а)
что-то мне подсказывает что 2 запроса тут будут в любом случае лучше. Можно конечно попробовать сделать через join или вложеный запрос (типа вашего варианта), но как-то это всё не очень
----- Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
Мелкий
Отправлено: 11 Марта, 2016 - 14:26:37
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
SELECT id, text FROMTABLEWHERE id >=(SELECT id FROMTABLEWHERE text='text')ORDERBY id ASCLIMIT2
была самой первой, но смутило то что в ответе мы получаем в 2 раза больше чем необходимо. Мне уже так же кажется, что быстрее, проще и понятнее будет оставить 2 запроса.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.