сделать подзапрос на 4.0

ТопольМ

Новичок со стажем
сделать подзапрос на 4.0

Надо переделать запрос с подзапросом для 4.0:
вот он:

select id from obj where id=$id and id in (select id from obj where obj.parent_id=1234 $order $limit)

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

надо сделать этот запрос без подзапроса, т.е. под в MySQL 4.0

можно, конечно, сделать в два запроса и через пхп, но набор из второго селекта ну ооооочень здоровый :)
 

chira

Новичок
а такой запрос чем не устраивает?
Код:
select id 
from obj 
where obj.parent_id=1234
  AND id=$id
 $order $limit
 

ТопольМ

Новичок со стажем
Автор оригинала: chira
а такой запрос чем не устраивает?
Код:
select id 
from obj 
where obj.parent_id=1234
  AND id=$id
 $order $limit
полностью не устраивает! ;)

смотри как работает мой:
он сначала выбирает набор, сортирует его и выбирает лимит, а затем проверяет входит ли данная запись в этот набор

а твой:
в твоем запросе order и limit вообще не имеют значения, т.к. id явно указан, а в моем они работают
 

ТопольМ

Новичок со стажем
Автор оригинала: si
ТопольМ
ваш запрос очень странный
это точно :)
дело в том что это очень сильно упрощенный вариант необходимого запроса
Автор оригинала: si
в твоем он тоже явно указан id=$id
мой запрос сначала выбирает набор, сортирует его и выбирает лимит, а затем проверяет входит ли УКАЗАННАЯ запись в этот набор
 

kos

Новичок
ТопольМ
думаю без подзапроса это не возможно, нельзя применить limit не ко всем записям
 

si

Administrator
ТопольМ
вы лучше обьясните смысл всех этих действий
 

chira

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

ТопольМ

Новичок со стажем
chira
не надо нас жалеть ...
я никого не пытаюсь жалеть...
и рассказывать как работает твой запрос ...
рассказано было как раз для тебя, чтобы обосновать неприменимость твоего варианта запроса в моем случае
скажи, что хочешь получить, постраничный вывод, оптимизацию или ещё чего-то
вот краткое описание контекста:
таблица obj состоит из дерева объектов
id, parentid, <всякие другие параметры объекта>

изначально запрос был такого вида:
select obj.id from obj where obj.id=$id and ({$where})

пример: возникла необходимость выбрать первого потомка, какого-то объекта, причем потомки предварительно должны быть отсортированы по одному из своих параметров

вот отсюда и был придуман запрос
select id from obj where id=$id and id in (select id from obj where obj.parent_id=1234 $order $limit)

который должен выполняться под 4.0, не поддерживающей подзапросы.

надеюсь понятно изложил суть проблемы
 

alpine

Новичок
ТопольМ
Стоп. Что-то не то с запросом который ты приводишь ....
 

ТопольМ

Новичок со стажем
Тоесть LIMIT 1 ?
Я к тому что лучше через два запроса и PHP. IMHO
limit 1 только в нужном месте
а через пхп не хочется делать, т.к. выборка объектов вторым селектом, ну ооооооооочень большая.
может есть вариант сделать это на сервере? :confused:
 

si

Administrator
вам же надо везде по 1 записи, откуда большая не понятно
 

alpine

Новичок
ТопольМ
У тебя id уникален в таблице?

-~{}~ 23.11.05 22:47:

Код:
select id from obj where id=$id and id in (select id from obj where obj.parent_id=1234 $order $limit)
Бессмысленный запрос.
 

Necromant

Новичок
выборка объектов вторым селектом, ну ооооооооочень большая.
При LIMIT 1 , выборка большая ?????

[sql]
SELECT * FROM t1, t1 as t2 WHERE t1.id = t2.parent_id AND t1.id=12
[\sql]
Только , свой ORDER BY, LIMIT
 

alpine

Новичок
Necromant
Не гони лошадей. Тут похоже тяжелый случай. Страницы две три точно тред будет ... :D
 

alpine

Новичок
Necromant
Это у него был неудачный пример того что он хочет. А на самом деле что он хочет не ясно ...
 

chira

Новичок
А на самом деле что он хочет не ясно ...
вот и я об этом ...

ТопольМ
ещё могу повторить не нужно объяснять как работает придуманный тобой запрос
возникла необходимость выбрать первого потомка, какого-то объекта, причем потомки предварительно должны быть отсортированы по одному из своих параметров
приведённый мной запрос по моему полность подходит под описание
 

alpine

Новичок
chira
А можно поинтересоваться? Поле id не уникально?

-~{}~ 23.11.05 23:58:

Потому что если оно уникально то в лимите и ордербае нет смысла и запрос проверяет является ли obj с id=$id child-ом obj-тa c id=1234(parent_id=1234).
 

chira

Новичок
alpine

откуда ты взял, что $id=1234?
об уникальности поля id тоже не говорилось, хотя об этом можно предположить из упоминания о дереве ...
написав SQL с вопросом я преобразовал только условие
id = 345 AND id IN ( select ... parent_id=1234 )
перенеся id=345 в подзапрос, это можно сделать т.к. запрос и подзапрос относятся к одной таблице ...

хотя из
select id from obj where id=$id (не смотря на подзапрос)
мы можем сказать, что мы получим $id

автор вопроса по прежнему что-то скрывает ... :)
 
Сверху