2016-04-30 72 views
1

一個應用程序僅根據女士的標準將女士與紳士進行匹配。有2個相同結構的MySQL表。用布爾值記錄個人的品質。查找相同的MYSQL表格之間的匹配

表1:GentlemenQualities

ID /英俊/舒適/富/運動/時尚

彼得/ 1/1/1/0/0

喬治/ 0/1/0/1/0

瑪麗正在尋找一個舒適和英俊紳士

TABLE2:LadiesCri特里亞

ID /英俊/舒適/富/運動/時尚

瑪麗/ 1/1/0/0/0

下面的代碼工具發現瑪麗君子當時她的新數據輸入到數據庫中:

SELECT ID FROM GentlemenQualities WHERE Handsome = 1 AND Charming = 1 

我們發現彼得......我們做的比賽!彼得也很富有,但這對瑪麗並不重要。

彼得行​​從GentlemenQualities刪除,瑪麗的行從LadiesCriteria DELETED

走來關穎,她想要一個時髦的紳士,她不關心他的其他素質

賈尼絲/ 0/0/0/0/1

SELECT ID FROM GentlemenQualities WHERE Fashionable = 1 

這會畫空白。 Janice尚未匹配。

現在有在GentlemenQualities一個新條目

漢斯/ 1/0/1/0/1

如何匹配漢斯賈尼絲儘可能高效地? (可能有數百個無與倫比的女士)

我正在使用php & MySQLi。

回答

1

如果女士們的標準爲等於或小於紳士的標準,那麼你應該將新紳士數據在下面的SQL查詢:

與Hans:

SELECT ID FROM LadiesCriteria 
WHERE Handsome <= 1 
AND Charming <= 0 
AND Rich <= 1 
AND Athletic <= 0 
AND Fashionable <= 1 

你會發現:

Janice | 0 | 0 | 0 | 0 | 1 

與彼得:

SELECT ID FROM LadiesCriteria 
WHERE Handsome <= 1 
AND Charming <= 1 
AND Rich <= 1 
AND Athletic <= 0 
AND Fashionable <= 0 

你會發現:

Mary | 1 | 1 | 0 | 0 | 0 

但不是衛蘭,因爲她想要一個時髦的紳士。

+1

這正是我需要的。謝謝! – grateful

-1

您正在使用(|)管道和字符串匹配來解析字符串。

我建議不要使用字符串匹配,這是性能錯誤,而是使用整數來比較。創建一個整數模式,然後與相應的整數相匹配。

+0

這只是我的格式化問題的方式,以明確分隔數據庫列和它們的值 - 這不是代碼。因爲它很混亂,我會編輯並使用'/'。 – grateful