Сложная сортировка

berkut

Новичок
Сложная сортировка

Подскажите, как выбрать из таблицы значения, по определённому условию и
отсортировать результаты по кол-ву вхождений в таблицу значений из результата?
Вообщем: есть таблица "ассоциаций", где хранятся id соотносящихся объектов
Код:
CREATE TABLE associations (
  item_1 mediumint(9) unsigned NOT NULL default '0',
  item_2 mediumint(9) unsigned NOT NULL default '0'
) ENGINE=MyISAM
и данные
Код:
item_1	item_2
-----------------------
1	2
1	3
2	3
2	5
Нужно выбрать все ассоциации для объекта "1":
Код:
SELECT * FROM associations WHERE item_1 = 1 OR item_2 = 1
Это будут объекты "2" и "3". Но эти результаты нужно отсортировать по частоте вхождения в таблицу: т.е. объект "3" имеет ассоциации с 1 и с 2(два вхождения), а объект "2" имеет 3 вхождения(ассоциации с 1, 3, 5).
 

Marquis

Новичок
что то вроде
SELECT *, (SELECT количество ассоциаций) AS counter FROM associations
WHERE {условия}
ORDER BY counter
 

Wicked

Новичок
что мешает хранить по две связи: (A, B), (B, A) ? Тогда большинство вопросов и проблем с производительностью должно исчезнуть.

-~{}~ 30.06.07 23:52:

к тому же, кол-во вхождений в эту таблицу можно закэшировать в самой таблице объектов, добавив туда еще одно поле.
 

berkut

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

Wicked

Новичок
berkut
а имхо наоборот: по 2 записи как раз правильно. Потому что сейчас у тебя записи как бы несимметричные получаются, а посему не совсем равноценные.

А насчет кэширования - лично я с таким вариантом смирился (благодаря fisher-у и admin-у:)). Как это технически корректно сделать - отдельный разговор.

-~{}~ 01.07.07 01:33:

http://phpclub.ru/talk/showthread.php?postid=723268#post723268 + все последующее обсуждение...
 
Сверху