Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Помогите составить запрос
GET  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



TERRAFORMING ENGINEER
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 3846
Пользователь №: 21196
На форуме: 6 лет, 9 месяцев
Карма: 87




Привет.

Не могу понять, как подступиться:

есть такая вот таблица:

user posted image

индексы есть по каждому полю

Можно ли сделать одним запросом, чтоб вытащить все id0 у первых строк у которых id2=0 и одинаковые id1, как только у строки id1 стал другой, то стоп запрос, типа LIMIT.

Представляю вот, как сдеать двумя запросам:

1. $sql1 = mysql::result("SELECT `id1` FROM `tab` WHERE `id2`='0' LIMIT 1");
2. $sql2 = mysql::result("SELECT `id0` FROM `tab` WHERE `id1`='{$sql1['id1']}'");


А есть ли возможность не городить это и не делать GROUP BY? Чтоб запрос был простой и быстрый.


--------------------
Не тот велик, кто не падал, а тот кто падал и поднимался.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
sergeiss  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Сидел он, дум великих полон - и вдаль глядел
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 14965
Пользователь №: 4190
На форуме: 8 лет, 9 месяцев, 26 дней
Карма: 443




Цитата (ABC @ 24.01.2014 - 13:48)
и не делать GROUP BY?

А чем тебе он не нравится? wink.gif

И еще. Я не понял, что ты хочешь получить в итоге. Те строки, что выделены желтым на картинке? Тогда еще условия нужны.

PS. И в каком виде ты их хочешь получить?


Это сообщение отредактировал sergeiss - 24.01.2014 - 14:08


--------------------
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
PMICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
GET  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



TERRAFORMING ENGINEER
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 3846
Пользователь №: 21196
На форуме: 6 лет, 9 месяцев
Карма: 87




sergeiss

Хочу получить числа 21 и 45


--------------------
Не тот велик, кто не падал, а тот кто падал и поднимался.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
GET  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



TERRAFORMING ENGINEER
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 3846
Пользователь №: 21196
На форуме: 6 лет, 9 месяцев
Карма: 87




Цитата

Цитата (ABC @ 24.01.2014 - 13:48)
и не делать GROUP BY?

А чем тебе он не нравится?

несколько миллонов строк там


--------------------
Не тот велик, кто не падал, а тот кто падал и поднимался.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
sergeiss  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Сидел он, дум великих полон - и вдаль глядел
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 14965
Пользователь №: 4190
На форуме: 8 лет, 9 месяцев, 26 дней
Карма: 443




Возможно, вот твой запрос, хотя и не буду утверждать на 100%, что я правильно понял, что ты хочешь получить:
SELECT `id0` FROM `tab` WHERE `id1`= (SELECT `id1` FROM `tab` WHERE `id2`=0 LIMIT 1)


PS. А ЗАЧЕМ целые числа в кавычки заключать???

PPS.
Цитата (ABC @ 24.01.2014 - 14:06)
несколько миллонов строк там

Условие "рулит", позволяя выделить только те строки для группировки, что соответствуют условию.

Это сообщение отредактировал sergeiss - 24.01.2014 - 14:10


--------------------
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
PMICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Winston  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме




******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 9509
Пользователь №: 18161
На форуме: 7 лет, 5 месяцев, 10 дней
Карма: 552




Как-то так? smile.gif
http://sqlfiddle.com/#!2/29f9d4/14

UPD
sergeiss хорошее решение smile.gif
PMСайт пользователя
    1   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
sergeiss  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Сидел он, дум великих полон - и вдаль глядел
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 14965
Пользователь №: 4190
На форуме: 8 лет, 9 месяцев, 26 дней
Карма: 443




Winston, эка ты завернул... В "моем" запросе достаточно в начале заменить `id` на * и всё будет smile.gif А ты лишнего наворотил.


--------------------
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
PMICQ
    1   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
GET  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



TERRAFORMING ENGINEER
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 3846
Пользователь №: 21196
На форуме: 6 лет, 9 месяцев
Карма: 87




В mysql нету же break; smile.gif

Чтоб начать считывать строчки и с первой строкой ввести переменную, как только она изменится т.е. поменяется id1 делаем break;

Короче, видимо просто так не замутить.

Цитата
Возможно, вот твой запрос, хотя и не буду утверждать на 100%, что я правильно понял, что ты хочешь получить:
SELECT `id0` FROM `tab` WHERE `id1`= (SELECT `id1` FROM `tab` WHERE `id2`=0 LIMIT 1)

sergeiss
ну да...те же два запроса.

Цитата
PS. А ЗАЧЕМ целые числа в кавычки заключать???


Кавычки...да как-то привык и где-то читал, что вроде интерпретатору MySQL легче так запрос читать.

Winston

Да! Спасибо тоже...похожее решение.

Пока перебирал таблицу нашел место где можно изменить логику и в итоге все изменилось.

Спасибо еще раз, что откликнулись.


--------------------
Не тот велик, кто не падал, а тот кто падал и поднимался.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
sergeiss  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Сидел он, дум великих полон - и вдаль глядел
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 14965
Пользователь №: 4190
На форуме: 8 лет, 9 месяцев, 26 дней
Карма: 443




Цитата (ABC @ 24.01.2014 - 14:19)
sergeiss
ну да...те же два запроса.

Нет, это один запрос. Сложный.

Впрочем, давай "договоримся о терминах" smile.gif Под словами "один запрос" я лично понимаю некий текст, который отправляется в БД из ПХП. В твоем случае (начало темы) это будет проделано 2 раза. В "моем" случае - 1 раз. И это будет НАМНОГО быстрее, чем "твои" 2 запроса.
Хотя ты прав, формально, тут одни и те же данные запрашиваются. Но время выполнения будет разное.


--------------------
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
PMICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
GET  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



TERRAFORMING ENGINEER
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 3846
Пользователь №: 21196
На форуме: 6 лет, 9 месяцев
Карма: 87




Цитата
И это будет НАМНОГО быстрее, чем "твои" 2 запроса.


Нуу не на мнооого....не преувеличивайТЕ smile.gif


--------------------
Не тот велик, кто не падал, а тот кто падал и поднимался.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
sergeiss  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Сидел он, дум великих полон - и вдаль глядел
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 14965
Пользователь №: 4190
На форуме: 8 лет, 9 месяцев, 26 дней
Карма: 443




Цитата (ABC @ 24.01.2014 - 14:46)
Нуу не на мнооого....не преувеличивайТЕ

Думаешь? Не хочу расписывать подробно... Но оцени сам: кроме собственно выполнения запроса, время еще уходит на то, чтобы переслать запрос и затем отправить обратно ответ. Подготовка запроса происходит дважды.
Обработка данных в ПХП тоже требует время на выполнение.

В итоге 2 запроса реально будут работать дольше, несмотря на то, что итоговые данные будут теми же.


--------------------
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
PMICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
GET  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



TERRAFORMING ENGINEER
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 3846
Пользователь №: 21196
На форуме: 6 лет, 9 месяцев
Карма: 87




Цитата
реально будут работать дольше


реально, но в этом масштабе совсем немного, mysql также нужно будет тратить время на сооружение вложенного запроса - во первых.

Во вторых - если говорить, откровенно я пример написал специально расписав в два запроса, чтоб показать смысл, если б я выбрал этот способ скорее всего я бы и так сделал его в два запроса.

Однако, чтоб не обижать ни тебя, ни Winston`а я тактично не стал писать:
что-то типа "Да это тоже самое". Потому, что я уважаю чужой труд и уделенное мне время.

Ты отличный специалист и это факт, который вряд ли кто-то будет оспаривать на форуме, но как мне, кажется и тебе стоит быть немного тактичней и не давить лишний раз на собеседника пытаясь поставить его в неловкое положение, доказывая очевидные вещи.

Еще раз спасибо.

smile.gif


--------------------
Не тот велик, кто не падал, а тот кто падал и поднимался.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
sergeiss  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Сидел он, дум великих полон - и вдаль глядел
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 14965
Пользователь №: 4190
На форуме: 8 лет, 9 месяцев, 26 дней
Карма: 443




Цитата (ABC @ 24.01.2014 - 14:46)
Нуу не на мнооого....

Цитата (ABC @ 24.01.2014 - 15:44)
кажется и тебе стоит быть немного тактичней

Хорошо, уговорил smile.gif Скажу тактичнее и короче:
из этих "немного" может сложиться весьма заметное время, когда запросов на сервере будет много от разных юзеров smile.gif


--------------------
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
PMICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса