2012-04-09 12 views
0

私は、eye_colour、hair_colour、sizeなどのユーザープロファイルページを持つWebサイトを開発しました。各項目には、ドロップダウンリストから入力された値の設定範囲があります。ユーザーが理想的な一致を見つけるためにこれらの設定範囲を検索できるようにしたい。 この目的のために、私は検索フォームをセットアップし、タプルユーザーを使用して配列seachにフィードするいくつかのSELECTステートメントを持っています。すなわちWeighted Arrayの結果のPHP配列

<?php 
$var1 = SELECT ‘user’ FROM ‘profile’ WHERE ‘hair_colour’ = $hair; 
$var2 = SELECT ‘user’ FROM ‘profile’ WHERE ‘eye_colour’ = $eye; 
$var3………4………..5………..n etcc 
?> 

私は、ソート/ユーザーのほとんどoccurancesで重み付けし、すべての項目が、その後表示することができ、すべての配列が中とUNION句ALL一緒にすることを可能にする機能があると思います。そのようなPHP関数が存在し、その名前が何であるか知っていますか?私はそのような関数が存在しない場合は、SQLを試すことができますが、私は間違いなくいくつかの間違いを犯すでしょう!助けてくれてありがとう!

私はあなたがしたい行を取得するために最初の単一のクエリを使用し
+0

"array unioned all"については、http://php.net/implodeを参照してください。そして、あなたのコードサンプルの間違った引用は、SQLが "スマート引用符"を好まないので、あなたが質問を書いたテキストエディタが原因です。そして、単にWHERE hair_color = '$ hair' OR eye_colour = '$ eye' OR ....などを使用することを検討してください。このような単純な状況のUNIONクエリは絶対に必要ありません。 –

+0

[extract](http://php.net/manual/en/function.extract.php)を見てください – diEcho

+0

私はエディタを責めます。単語の質問にちょうど入ったコードから直接コピーしていないし、賢明な見積もりも考えられませんでした。 「私はこれらを信じていたはずだ」と言った。ソリューションの人に感謝 –

答えて

1

$rows = array(); 
while ($row = mysql_fetch_array($result)){ 

    $row['score'] = 0; 
    if ($row['hair'] == $hair) $row['score']++; 
    if ($row['eye'] == $eye) $row['score']++; 

    $rows[] = $row; 
} 

そして最後に並べ替える:各行にスコアを割り当てる、その後

$sql = "SELECT * FROM profile WHERE (hair = '$hair_esc') OR (eye = '$eye_esc')"; 
$result = mysql_query($sql); 

結果をループをスコアでリストしてください:

usort($rows, 'sort_by_score'); 

function sort_by_score($a, $b){ 
    return $a['score'] - $b['score']; 
} 
+0

ありがとう、私は投票することはできませんが、感謝!!!!そのように置いたときにとても簡単に見えます! –

関連する問題