2012-04-09 63 views
0

我開發了一個帶有eye_colour,hair_colour,size等用戶個人資料頁面的網站。每個項目都有一組通過下拉列表輸入的值。我希望允許用戶搜索這些設置範圍以找到他們的理想匹配。 爲此,我設置了一個搜索表單,並使用元組用戶將大量SELECT語句提供給數組搜索。即用於加權陣列結果的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 
?> 

我認爲有一個函數,它允許採取在所有陣列和聯合在一起ALL一起,然後排序/由用戶最occurances加權並且然後可以顯示所有項目。有誰知道,如果這樣的PHP功能存在,並且它的名字是什麼?如果這樣的功能不存在,我可以嘗試SQL,但我肯定會犯一些錯誤!謝謝你的幫助!

+0

http://php.net/implode爲您的「陣列聯合所有」。然後,我希望代碼示例中的錯誤引用僅僅是由於您編寫了問題的任何文本編輯器,因爲SQL不喜歡「精明的引號」。並考慮使用'WHERE hair_color ='$ hair'或eye_colour ='$ eye'或....'等等。 UNION查詢絕對不需要這種簡單的情況。 – 2012-04-09 04:40:20

+0

看[摘錄](http://php.net/manual/en/function.extract.php) – diEcho 2012-04-09 04:43:00

+0

是的,我會譴責編輯。沒有直接從代碼中複製剛纔輸入的關於單詞的問題,甚至沒有想到聰明的語錄。 '應該使用這些我相信'。感謝解決方案夥計 – 2012-04-09 04:57:03

回答

1

我會用一個單一的查詢首先要得到你想要的行:

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

然後遍歷結果,將一個得分指定給各行:

$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; 
} 

然後終於排序按分數列出:

usort($rows, 'sort_by_score'); 

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

謝謝你,我不能投票,但謝謝!當這樣放置時看起來很容易! – 2012-04-09 04:53:49