Forum Webscript.Ru
Общие => Базы данных => Тема начата: Jean от 04 Ноября 2004, 08:12:24
-
у меня есть две таблицы, предположим object, object_attribute.
object_attribute связана с object по полю objectid
и когда я хочу вывести информацию об объекте, то я join\'ом соединяю таблицы.
то есть результатом будет количество строк равное количеству атрибутов у объекта.
Что делать если я хочу вывести информацию о пяти, десяти объектах, как мне ограничить результат, ведь заранее я не знаю, сколько строк будет в результате (всегда разное количество атрибутов может быть)
Заранее спасибо
-
Limit ? Offset ?
-
ну если я правильно понимаю, то limit, выводит заданное количество строк всего результата
то есть например у меня есть 5 объектов
у 4 из них по три атрибута, а у 5го - 6
всего строк должно получиться 18, поэтому я ведь не могу написать limit 5
-
commander, Limit ему не подойдёт, т.к. он хочет ограничить не по количеству строк, а по количеству объектов.
На мой взгляд, тут может подойти вложенный селект (http://www.mysql.ru/docs/man/ANSI_diff_Sub-selects.html), поддерживаемый в MySQL начиная с версии 4.1. У меня установлен 4.0.12, поэтому у себя синтаксис проверить не могу, но это должно быть что-то типа такого:
SELECT * FROM object JOIN object_attribute ON object.objectid = object_attribute.objectid WHERE object.objectid IN (SELECT DISTINCT objectid FROM object LIMIT 10);
Или можно скриптом этот запрос разбить на два: сначала получить список уникальных айди, а потом их просто поставить в IN(), если старая версия MySQL или проблемы с запросом.
-
да у меня тоже 4.0.18, так что вложенный селект себе позволить не могу.
ладно, буду биться дальше
-
Jean:
ладно, буду биться дальше
Зачем биться? Делай двумя запросами!