Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Выбрать пары, в которых каждый элемент уникален
 
 автор: Eugene77   (22.02.2010 в 17:46)   письмо автору
 
 

Таблица состоит из двух колонок: слова и первичный ключ ID.
Слова могут повторяться.
Надо найти все возможные словосочетания, в которых одно слово находится в одном списке, другое в другом , а расстояние между ними не более 40.
SELECT t1.id,  t2.id FROM tab as t1, tab as t2 
WHERE
t1.w IN() AND
t2.w IN() AND
ABS(t1.id - t2.id) < 40
ORDER BY ABS(t1.id - t2.id);

Этот запрос решает задачу.
Однако, мне надо наложить ещё одно условие:
Необходимо, чтобы первое слово в словосочетании использовалось не более одного раза и более того, если с этим словом можно составить несколько словосочетаний, то должно быть выбрано именно то, в котором слова расположены ближе всего друг к другу, остальные словосочетания должны быть отброшены.

На первый взгляд хочется добавить просто
GROUP BY t1.id

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

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования