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

Форум PHP

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

 

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

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

тема: Нужна помощь в сортировке
 
 автор: Shorr Kan   (11.03.2013 в 18:53)   письмо автору
 
 

Добрый день. Имею массив такого вида:


[0] =>
        [айди_текста] =>
                      [айди_слова] => количество слова
                      [айди_слова] => количество слова
        [айди_текста] =>
                      [айди_слова] => количество слова
                      [айди_слова] => количество слова


причем есть такая же структура еще с ключами [1] и [2]. Каждый из этих массивов уже отсортирован как надо. В каждом из них айди_текста может повторяться, а может и нет. Допустим в [0] и в [2] есть текст id382, а в [1] его нет.
Вопрос: как мне вывести список айди_текстов (кстати он есть и в отдельном массиве), при этом ориентируясь прежде всего на порядок [0], затем на [1], и лишь затем - на [2] ?
То есть, выше должны быть те, которые выше в [0]. Но если их значение одинаковое (одинаковое количество слов), то кто первее - определяется уже по [1] (если там есть такой текст), ну и уже третьим шагом - определяется по [3].
Надеюсь я понятно обрисовал ситуацию.
Полный вид массива для примера:

Array
(
    [0] => Array
        (
            [288] => Array
                (
                    [84] => 2
                    [335] => 1
                )

            [382] => Array
                (
                    [84] => 2
                    [335] => 1
                )
         )
    [1] => Array
        (
         )
    [2] => Array
        (

            [382] => Array
                (
                    [84] => 3
                    [335] => 1
                )
            [288] => Array
                (
                    [335] => 1
                )
         )



вот в данном случае текст 382 должен выползти выше, чем 288.

  Ответить  
 
 автор: Valick   (11.03.2013 в 19:25)   письмо автору
 
   для: Shorr Kan   (11.03.2013 в 18:53)
 

массив случайно не из базы данных?

  Ответить  
 
 автор: Shorr Kan   (11.03.2013 в 19:43)   письмо автору
 
   для: Valick   (11.03.2013 в 19:25)
 

ну в каком-то далеком прошлом - да. Просто после этого он проходит десяток обработок. Сортировать при помощи mysql не получится (даже до обработки)

  Ответить  
 
 автор: Valick   (11.03.2013 в 19:51)   письмо автору
 
   для: Shorr Kan   (11.03.2013 в 19:43)
 

> Сортировать при помощи mysql не получится (даже до обработки)
Представте ситуацию:
Я копаю яму, взял лом и ковыряюсь потихоньку...
Вы ко мне подходите и говорите:
- Слыш, чувак, не мучай окружающих, возьми лопату...
А я отвечаю:
- Копать с помощью лопаты не получится...
___
можете описать эмоции в данной ситуации?

  Ответить  
 
 автор: Shorr Kan   (14.03.2013 в 08:49)   письмо автору
 
   для: Valick   (11.03.2013 в 19:51)
 

Причина, по которой сортировать не получится - проста. Вот только для объяснения сложна, а для понимания - еще более сложна.
Структура базы такова, что есть таблица со связями - слово-запись-тип-количество. Тип - это то самое, что в моем примере - ключ массива (0, 1 и 2). Тип 0 - главный. Тип 1 - менее важен. Тип 2 - совсем неважен. Но каждый последующий влияет на сортировку, если на предыдущем типе все одинаково.
Если у одной записи в тип 0 есть два слова, и каждое встречается по разу, у другой записи - та же картина, но в тип 1 у нее есть одно из этих слов, а в тип 1 у первой записи нет ничего, то вторая запись должна быть выше. При всем при этом, есть еще и тип 2, который действует таким же образом.

Большее количество слов - это хорошо (влияет на сортировку), но важнее - бОльшее количество разных слов. То есть, если у одной записи в тип 0 одно слово встречается пять раз, а у другой записи в тип 0 два разных слова, каждое встречается только по одному разу, то выше будет вторая запись.

Ко всему этому объяснению прикладываю структуру, которая будет иметь такую же степень полезности:

text_id | word_id | type | count

надо ли говорить, что всё это int.

Как копать лопатой?

  Ответить  
 
 автор: Valick   (14.03.2013 в 09:44)   письмо автору
 
   для: Shorr Kan   (14.03.2013 в 08:49)
 

очень похоже на полнотекстовый поиск и релевантность
text_id | word_id | type | count

надо ли говорить, что всё это int.

это я так понимаю своего рода индексы?

уточните что именно вы ищите?
если слова в тексте или предложенииях, то это полнотекстовый поиск, и если есть сомнения что MySQL с этим справится, то можно пробовать наример Сфинкс
а если это какие-то параметры, чего-либо, то скорее всего неправильно организована БД

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

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