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
Форумы портала PHP.SU :: Версия для печати :: Цепочка значений
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » Цепочка значений

Страниц (1): [1]
 

1. nextdrift - 27 Ноября, 2010 - 08:00:24 - перейти к сообщению
Доброго времени суток.

Есть таблица связей
id_a| id_b
------------
1 | 4
4 | 6
5 | 7
6 | 8
8 | 15

нужно получить цепочку:
8-15, 6-8, 4-6, 1-4. Т.е. выбрать все звёна, которые взаимосвязаны, а затем вывести список в обратном порядке (по возрастанию).
2. DeepVarvar - 27 Ноября, 2010 - 08:18:34 - перейти к сообщению
Хм... Очень похоже на постраничный вывод, только "с другого ракурса" типа лимитов.. Однако не совсем понятен конечный результат. Не пойти ли от обратного не выводя то что не взаимосвязано?
3. nextdrift - 27 Ноября, 2010 - 12:19:47 - перейти к сообщению
Вариант может быть следующий:
id_a| id_b
------------
1 | 4
4 | 6
5 | 7
6 | 9
6 | 25
6 | 8
8 | 15


6 | 9
6 | 25
эти не должны попасть в массив. Поэтому я хочу делать в обратном поядке

Или это делается путём работы на стороне PHP ?
Но таких записей может быть около 5к ~ 10к (а может больше)
4. JustUserR - 27 Ноября, 2010 - 13:05:44 - перейти к сообщению
nextdrift пишет:
Или это делается путём работы на стороне PHP ?
Но таких записей может быть около 5к ~ 10к (а может больше
Осуществление решения приведнной вами задачи по построению списка последовательных элементов на основе информационной полей предоставляющих их уникальные поля в сторону генерации - в действительности необходимо проводить на стороне сервера баз данных при причине возможности прямого доступа к информационным полям и применения внутренних механихмов индексации в таблицах Тем не менее фактическое решение может быть достигнуто посредством использования пользовательских SQL-функций - по причине неопределенности обобщенного уровня вложенности линейных запросов
5. nextdrift - 27 Ноября, 2010 - 15:27:01 - перейти к сообщению
JustUserR пишет:
Осуществление решения приведнной вами задачи по построению списка последовательных элементов на основе информационной полей предоставляющих их уникальные поля в сторону генерации - в действительности необходимо проводить на стороне сервера баз данных при причине возможности прямого доступа к информационным полям и применения внутренних механихмов индексации в таблицах Тем не менее фактическое решение может быть достигнуто посредством использования пользовательских SQL-функций - по причине неопределенности обобщенного уровня вложенности линейных запросов


Ппц... Не понял
Можно по-русски ? Радость
А то я не на столько ещё силён
6. ALEN - 27 Ноября, 2010 - 17:08:00 - перейти к сообщению
nextdrift
Он по русски, не пугайтесь, там просто много БУКАВ.
JUR просто не любит писать коротко,а так там все по сути и просто.

P.S. JUR - свои посты в сателит постранично выводи и будет много ДЕНЯГ с сапы)))
7. dc93 - 27 Ноября, 2010 - 22:40:55 - перейти к сообщению
nextdrift
CODE (htmlphp):
скопировать код в буфер обмена
  1. select a.id_a, a.id_b from table a
  2. where
  3. exists (select 1 from table b where a.id_a = b.id_b)
  4. order by 1 desc
8. nextdrift - 28 Ноября, 2010 - 20:29:04 - перейти к сообщению
спасибо. Буду пробовать
9. dc93 - 28 Ноября, 2010 - 20:48:17 - перейти к сообщению
nextdrift пишет:
спасибо. Буду пробовать


если это надо представить в виде строки, то, для MySQL есть агрегирующая функция (кажется так называется) GROUP_CONCAT (только там по умолчанию стоит ограничение в 1024 символа), для MSSQL можно попробовать извратиться через CTE, у Oracle тоже вроде нечто подобное попадалось,
а в общем случае через курсор ляпить

 

Powered by ExBB FM 1.0 RC1