2011-06-24 20 views
1

基本的に私は自分のウェブサイト用のエンジンを構築していますが、SQLデータベースには基本的に2セットのテーブルが含まれていますファイル(.docなど)php:配列をmysqlの結果とマージし、配列キーでソートする

私はpopluateが動作していると私はそれがページの結果を返すようになった、今私は2つのquerysを実行するアイデアを思いついたファイルとページの両方を検索したいその2つの結果の配列を1つにマージし、次にそれらをクエリーによって追加される「オカレンス」によってソートします。しかし、出力は入力配列と一致しません。とにかくあなたのVARと検索用語(A)の出力は、ダンプ

// 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); 

をオフに動作するように何かを与えるためにいくつかのコードは、(この

配列(4){[0] =>文字列のように見えます"/index.php?page=footy_tipping.htm" ["url"] => string(33) "/index.php?page=footy_tipping.htm" [1] => string(4) "1272" [ "[occurrences"] => string(4) "1272"}

array(4){[0] => string(43) "/files/forms/misc/Adjustment%20TEMPLATE.xls" ["url" (1)=>文字列(1) "2" ["occurrences"] =>文字列(1)=>文字列(43) "/files/forms/misc/Adjustment%20TEMPLATE.xls" "2"}

array(6){[0] => string(33) "/index.php?page=footy_tipping.htm" ""(/)/ファイル/フォーム(2)=>文字列(43) "/ files/forms /"/"/ errors"その他/調整%の20TEMPLATE.xls」[3] =>の文字列(1) "2"}

上記の変数が実際にマニュアルと何で周りを見ていたとして、彼らは同じことを命じていますkey => value(ソート($ results ['occurrence']、DESC)など)で配列をソートする方法をお手伝いしました

どんな助けもありがとうございます:)

答えて

1

どのように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

(3つの結果があった場合、それは3回最初の結果になるだろう)結果の出力は、同じページになり、これを試してみましたが:すべての派生テーブルは、その持っている必要があります独自のエイリアス " – cyclobs

+0

そのエラーが発生したので、最後の行" ORDER BY occurrences DESC "は" t ORDER BY occurrences DESC "である必要があります。助けをありがとう – cyclobs

+0

問題ありません。私はエイリアスをエイリアスに追加するように解決しました。 –

0

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); 
?> 
+0

私は、無効なクエリ」のエラーを返します – cyclobs

関連する問題