2011-10-24 85 views
0

這看起來太簡單了,因爲首先是一個問題 - 但這裏是無論如何。帶有多個複選框類別的PHP MySQL搜索表單

可以說你有一個搜索表單,並且你正在尋找在一個行業的某些分支中處理的公司。該表格將爲每個問題提供一組複選框,用戶可以選擇他們想要的任何數量。


你最喜歡什麼顏色?

[]紅

[]藍

[]黃

你最喜歡什麼水果?

[]蘋果

[]橙色

[]香蕉


問題一號

如果用戶檢查紅色和藍色 - 做我們拉來自僅匹配兩者的數據庫行?或者,我們是否也包含僅匹配紅色或僅藍色的行?在我看來,最終用戶可能期望看到一個或另一個或兩個結果!

問題二號

霸菱記住,CMS我要使用的數據存儲在陣列中的每個問題。因此,第一個問題的公司A的值可以是「紅色|藍色」或「紅色」或「紅色|藍色|黃色」等 - 加上我有的表單有10個類別,每個至少有5個複選框 - 我怎樣才能將其轉換爲高效且優化的查詢,而不必求助於if/else mish mash?

任何幫助非常感謝。

回答

1
  1. 它很可能是連接(紅色或藍色)而不是分離(紅色和藍色),但它取決於問題的語義。如果您提供可以共同發生的選項,那麼您可能需要進行分離。

  2. 我看不出更好的辦法不是像

    $顏色= $ POST [ 「顏色[]」];
    $ items = array();

    的foreach($顏色$顏色){

    $項[] = 「 '$顏色' IN的顏色」;

    }

    $ SQL = 「AND(」 .implode( '或',$項目)。「)」;

0

對於P2,我將創建一個「多對多」的表,並使用帶IN語句的查詢。 對於P1,像 例如:紅色,藍色,白色

select id,color,count(color) as occurrences from table inner join table_attributes where color in ('red','blue','white') order by occurrences 

基礎上,你可以對結果進行排序出現的次數