您需要對錶格進行更好的設計。 有兩種方法可以做到這一點。首先是簡單的,但我不推薦它用於專業用途。
方法一 - 舉報記錄
動物表是這樣的: {animal_id,名稱,is_land,is_river,is_lake,is_air,is_ocean,is_mountain,is_valey,is_north_pole,is_africa,... ....等)
這是非常愚蠢的,但它完成了工作。
方法二 - 交叉矩陣
我不知道如果交叉矩陣使得在上世紀90年代,它被稱爲在阿爾巴尼亞「Matrica E在英語,但在計算機科學普裏什蒂納,科索沃ü任何意義kryqëzimeve「
你應該有3個表格。
- 動物(animal_id,名)
- 位置(loc_id,名)
- ani_loc_matrix(animal_id,loc_id)
這是很難的程序與此方法,因爲SQL不進行這樣,但查詢數據庫時速度驚人。
這裏的想法很簡單。如果動物屬於某個位置,則只需在matrix_table中添加一個記錄,並添加一個animal_id和loc_id。您可以添加多個位置,相同的動物例如
INSERT INTO ani_loc_matrix VALUES (01, 01)
其中第一個01將是一個魚的ID,第二個01是海洋的ID。
,如果你的位置表有這樣的事情:
- 01海洋
- 02海
- 03湖
- 04河
- 06池
- 07北極
...您可以添加以下
INSERT INTO ani_loc_matrix VALUES (01, 01)
INSERT INTO ani_loc_matrix VALUES (01, 02)
INSERT INTO ani_loc_matrix VALUES (01, 03)
INSERT INTO ani_loc_matrix VALUES (01, 04)
INSERT INTO ani_loc_matrix VALUES (01, 05)
要檢查是否有魚在北極類型的:
SELECT * FROM ani_loc_matrix WHERE animal_id=01 AND loc_id=07
要查找所有魚類的位置
SELECT * FROM ani_loc_matrix WHERE animal_id=01
要找到什麼生活在所有水域
SELECT * FROM ani_loc_matrix WHERE loc_id=01 OR loc_id=02 OR loc_id=03 OR loc_id=04 OR loc_id=05 OR loc_id=06
爲了讓你有連接表的實際動物名稱: SELECT * FROM動物作爲,ani_loc_matrix爲m WHERE a.animal_id = m.animal_id AND m.animal_id = 01
享受。 (FLOSSK會員)
謝謝您向我展示setFilter的功能然而,動物中的一個元素可以屬於多個位置,例如,魚可以位於「海」,「河」和「所有位置」的位置。但是location_id只會顯示一個地方,魚可以分成幾個地方。我正在考慮做一堆桌子來分組不同的地方,比如,桌上的海里會有所有的動物的ID在海里生活,桌上的河裏會有所有動物的ID,所以動物桌上的一個元素可以屬於海洋和河流。我想知道如何在QSqlQueryModel中做到這一點。謝謝! – Sean 2012-03-21 17:42:42