php: объединение массивов с результатами mysql и сортировка их по ключу массива - PullRequest
1 голос
/ 24 июня 2011

В основном я создаю поисковую систему для своего сайта, но моя база данных sql содержит в основном 2 набора таблиц (один набор для страниц на сайте и другой набор для файлов (.doc и т. Д.))

У меня работает всплывающее окно, и оно возвращает результаты страниц, теперь я хочу искать как страницы, так и файлы, и мне пришла в голову идея запустить 2 запроса (из-за 2 наборов таблиц), а затем объединить эти 2 полученных массивав один, а затем сортировать их по «появлению», который добавляется запросами.Но вывод не соответствует входным массивам.в любом случае какой-то код, который даст вам что-то для работы

// Search the DB for pages
$page_result = mysql_query("SELECT p.page_url AS url, COUNT(*) AS occurrences FROM page p, word w, occurrence o WHERE p.page_id = o.page_id AND w.page_word_id = o.page_word_id AND w.word_word LIKE '' '" . $stemmed_string . "' '%' GROUP BY p.page_id ORDER BY occurrences DESC") // LIMIT " . $results . "")
or die("Invalid query: " . mysql_error());

// Search the DB for files
$file_result = mysql_query("SELECT f.file_url AS url, COUNT(*) AS occurrences FROM files f, filenames fn, fileoccurrence fo WHERE f.file_id = fo.file_id AND fn.file_word_id = fo.file_word_id AND fn.file_word LIKE '' '" . $stemmed_string . "' '%' GROUP BY f.file_id ORDER BY occurrences DESC")
or die ("Invalid query: " . mysql_error());

$page_array = mysql_fetch_array($page_result);
$file_array = mysql_fetch_array($file_result);


$results = array_merge((array)$page_array, (array)$file_array);

вывод поискового запроса (a) с дампами var выглядит следующим образом

array (4) {[0] => string (33) "/index.php?page=footy_tipping.htm" ["url"] => string (33) "/index.php?page=footy_tipping.htm" [1] => string (4) "1272" ["вхождения"] => строка (4) "1272"}

array (4) {[0] => строка (43) "/ files / forms / misc / Adjustment% 20TEMPLATE.xls "[" url "] => string (43)" /files/forms/misc/Adjustment%20TEMPLATE.xls "[1] => string (1)" 2 "[" вхождений "] => строка (1) "2"}

array (6) {[0] => string (33) "/index.php?page=footy_tipping.htm" ["url"] => string (43) "/files / forms / misc / Adjustment% 20TEMPLATE.xls "[1] => строка (4)" 1272 "[" вхождения "] => строка (1)" 2 "[2] => строка (43)" / файлы/forms/misc/Adjustment%20TEMPLATE.xls "[3] => string (1)" 2 "}

они упорядочены так же, как переменные выше

Имелпоищите в руководстве и ничего толком не придумало, как отсортировать массив по key => value (например, sort ($ results ['adventence'], DESC))

любая помощь будет оценена, спасибо, ребята:)

Ответы [ 2 ]

1 голос
/ 24 июня 2011

Как это сделать в SQL как объединение?

SELECT * FROM (    
    SELECT p.page_url AS url,
        COUNT(*) AS occurrences
    FROM page p, word w, occurrence o
    WHERE p.page_id = o.page_id
        AND w.page_word_id = o.page_word_id
        AND w.word_word LIKE '' '" . $stemmed_string . "' '%'
    GROUP BY p.page_id
    UNION
    SELECT f.file_url AS url,
        COUNT(*) AS occurrences
    FROM files f, filenames fn, fileoccurrence fo
    WHERE f.file_id = fo.file_id
        AND fn.file_word_id = fo.file_word_id
        AND fn.file_word LIKE '' '" . $stemmed_string . "' '%'
    GROUP BY f.file_id
) t
ORDER BY occurrences DESC
0 голосов
/ 24 июня 2011

Вы смотрели на array_multisort ? Вам придется сделать что-то вроде этого:

<?php
// Obtain a list of columns
foreach ($results as $key => $row) {
    $occurrences[$key]  = $row['occurrences'];
}

// Sort the data with volume descending, edition ascending
// Add $data as the last parameter, to sort by the common key
array_multisort($occurrences, SORT_DESC, $results);
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...