Делаю движок словаря. Есть таблица словарных статей (ведущая), и есть таблица корней, использованных в статье (ведомая).
Аналогично наверное делается для облака тегов. Ничего особенного.
Упрощенно, структура таблиц:
Таблица статей «il»
`id` int(10) NOT NULL AUTO_INCREMENT,
`txt` text NOT NULL,
PRIMARY KEY (`id`)
Таблица корней «il_sh»
`sid` int(11) NOT NULL AUTO_INCREMENT,
`id` int(10) NOT NULL DEFAULT '0',
`sr` text NOT NULL,
PRIMARY KEY (`sid`),
Получить словарную статью вместе с корнями не трудно: ведомая таблица джойнится к ведущей по полю id.
Всё работает, вот вчерновую: http://e-liq.su/index.php?act=module&module=hebrev
Но возникла еще одна задача.
Как можно видеть, у некоторых статей корни не указаны вовсе; при этом может быть несколько статей с одинаковым корнем.
Нужно отсортировать словарные статьи по частотности корней: сначала статьи, у которых нет ни одного корня, потом статьи к тем корням, которые встретились всего 1 раз, потом к 2 и т.д.
Я конечно сделал костылик:
$srsz = array();Получаю массив, где ключами массива становятся корни, а значениями массивы айдишников статей к этому корню.
$DB->query("SELECT * FROM il_sh");
while($row = $DB->fetch_row())$srsz[ $row['sr'] ][] = $row['id'];
Дальше в пхп сортируется.
Может я что-то упустил, и можно как-то решить задачу проще, как-то отсортировать средствами MySQL?
_____________
Бесплатному сыру в дырки не заглядывают...