2016-01-05 83 views
1

我有一個表格頁面,然後在窗體中有電話號碼,年齡,郵政編碼字段,我有一個生成按鈕。當用戶生成按鈕時,我將自動填充表單中的問題。這些問題是調查問題,需要一些條件,無論我是否會在表格中顯示。最有效的方式在數據庫中搜索

我可以做所有的邏輯。我的問題是解決這個驗證的最好方法,我會解釋一下。我有Questionsid, question, column_header。我有Suppressionsid, phone, column_header

如果表單中的電話號碼已經在抑制表中,並且列標題名稱不存在,那麼當您單擊生成按鈕時不應顯示問題。

Ex。

Questions 
id | question | column_header| 
___|__________|______________| 
1 | test1 | ques1 

Suppression 
id | phone | column_header | 
___|_______|_______________| 
1 | 1234 | ques1 

這樣的例子,在形式的電話號碼是1234然後我點擊生成按鈕,我的jQuery和Ajax會處理這個問題。我將在每個問題和每個問題中循環,如果當前問題列標題已連同電話號碼一起在該表中,並且如果確實存在,那麼我將在Suppression表中查詢每個問題,然後我將不會啓用或顯示問題。

這將完成這項工作,我擔心如果抑制表增長如數百萬記錄,我有30個問題。因此,對於每個問題,我現在需要搜索suppresion表中的百萬條記錄,以查找匹配項,如果我需要禁用或啓用問題並且每個ajax調用的流程將會很慢。

有沒有更好的方法來做到這一點?我使用PHP Laravel和Postgre作爲我的數據庫。

回答

0

數百萬條記錄對RDBMS來說沒有任何意義。在主SQL語句中使用子查詢來查詢Suppresion表。篩選phonecolumn_header後,子查詢返回count(*)。然後你檢查子查詢的結果是否爲零。只有當子查詢的值爲零時,您主要的SQL匹配纔會在Questions表中。

例子: select * from Questions where column_header="yyy" 0=(select count(*) from Suppresion where phone="xxx" and column_header="yyy")

0

由於tcak指出,數以百萬計的記錄是不是現代的數據庫的一個問題,但它仍有助於想想你是怎麼訪問你的數據。

即使沒有數百萬條記錄,您計劃的效率也非常低,即使數據庫較小,網絡流量也可能會讓您的應用程序變慢。

相反,因爲您知道頁面加載時的電話號碼,爲什麼不加載特定電話號碼的所有問題並將該信息保存在頁面上,當用戶單擊某行時,您可以檢查您的瀏覽器信息。

+0

嗨,感謝您的幫助抱歉,我沒有說清楚。該電話號碼不會出現在頁面加載。電話號碼是用戶在單擊生成問題按鈕之前的用戶輸入。有其他選擇嗎?謝謝! – jackhammer013

+0

答案與您輸入的電話號碼相同。 –

+0

嗯我有點困惑,你說加載頁面加載時的所有問題?但是,在頁面加載問題上加載問題並不容易,因爲我需要輸入電話號碼的權利嗎?那麼會發生什麼是我在我的問題中陳述的相同邏輯? – jackhammer013

相關問題