我正在爲我的web項目(PHP/MySQL)開發搜索引擎。 用戶應該能夠通過一定的條件下搜索引擎的SQL查詢(PHP/MySQL)
- 位置找到一家酒店
- 設施
- 語言
表是如下
- tblHotels * HOTEL_ID * PK hotel_name 個
- tblLocations * LOCATION_ID * PK LOCATION_NAME
- tblFacilities * facility_id * PK facility_name
- tblLanguages * LANGUAGE_ID * PK LANGUAGE_NAME
- tblHotelLocations * LOCATION_ID * FK * HOTEL_ID * FK
- tbl酒店設施 * facility_id * FK 個* HOTEL_ID * FK
- tblHotelLanguages * LANGUAGE_ID * FK * HOTEL_ID * FK
例如用戶想搜索的酒店,位於舊金山(* LOCATION_ID *) 配有免費的Wi- (* facility_id *)和Pool(* facility_id *) 工作人員會說英語(* language_id *)和西班牙語(* language_id *)
顯然,用戶可能會更改搜索條件,例如將早餐添加到設施或德語語言。 在這種情況下,搜索結果應該反映所有條件都成立的酒店。
或者他可能不會選擇任何設施(語言等),在這種情況下,只有沒有設施的酒店應該退回。
可以用一個查詢來做到嗎?我很確定它是以及以某種方式與INNER JOIN連接。但我只是停留:(任何線索事先
感謝
更新:?!DB模式連接
/*
-- Query: desc tblHotels
-- Date: 2011-11-02 09:37
*/
INSERT INTO `tblhotels` (`Field`,`Type`,`Null`,`Key`,`Default`,`Extra`) VALUES ('hotel_id','int(11)','NO','PRI',NULL,'auto_increment');
INSERT INTO `tblhotels` (`Field`,`Type`,`Null`,`Key`,`Default`,`Extra`) VALUES ('hotel_name','varchar(45)','YES','UNI',NULL,'');
/*
-- Query: desc tblFacilities
-- Date: 2011-11-02 09:37
*/
INSERT INTO `tblfacilities` (`Field`,`Type`,`Null`,`Key`,`Default`,`Extra`) VALUES ('facility_id','int(11)','NO','PRI',NULL,'auto_increment');
INSERT INTO `tblfacilities` (`Field`,`Type`,`Null`,`Key`,`Default`,`Extra`) VALUES ('facility_name','varchar(45)','YES','UNI',NULL,'');
/*
-- Query: desc tblLocations
-- Date: 2011-11-02 09:37
*/
INSERT INTO `tbllocations` (`Field`,`Type`,`Null`,`Key`,`Default`,`Extra`) VALUES ('location_id','int(11)','NO','PRI',NULL,'auto_increment');
INSERT INTO `tbllocations` (`Field`,`Type`,`Null`,`Key`,`Default`,`Extra`) VALUES ('location_name','varchar(45)','YES','UNI',NULL,'');
/*
-- Query: desc tblLanguages
-- Date: 2011-11-02 09:37
*/
INSERT INTO `tbllanguages` (`Field`,`Type`,`Null`,`Key`,`Default`,`Extra`) VALUES ('language_id','int(11)','NO','PRI',NULL,'auto_increment');
INSERT INTO `tbllanguages` (`Field`,`Type`,`Null`,`Key`,`Default`,`Extra`) VALUES ('language_name','varchar(45)','YES','UNI',NULL,'');
/*
-- Query: desc tblHotelFacilities
-- Date: 2011-11-02 09:39
*/
INSERT INTO `tblhotelfacilities` (`Field`,`Type`,`Null`,`Key`,`Default`,`Extra`) VALUES ('tblHotelFacilities_id','int(11)','NO','PRI',NULL,'auto_increment');
INSERT INTO `tblhotelfacilities` (`Field`,`Type`,`Null`,`Key`,`Default`,`Extra`) VALUES ('facility_id','int(11)','YES','',NULL,'');
INSERT INTO `tblhotelfacilities` (`Field`,`Type`,`Null`,`Key`,`Default`,`Extra`) VALUES ('hotel_id','int(11)','YES','',NULL,'');
/*
-- Query: desc tblHotelLocations
-- Date: 2011-11-02 09:39
*/
INSERT INTO `tblhotellocations` (`Field`,`Type`,`Null`,`Key`,`Default`,`Extra`) VALUES ('tblHotelLocations_id','int(11)','NO','PRI',NULL,'auto_increment');
INSERT INTO `tblhotellocations` (`Field`,`Type`,`Null`,`Key`,`Default`,`Extra`) VALUES ('location_id','int(11)','YES','',NULL,'');
INSERT INTO `tblhotellocations` (`Field`,`Type`,`Null`,`Key`,`Default`,`Extra`) VALUES ('hotel_id','int(11)','YES','',NULL,'');
/*
-- Query: desc tblHotelLanguages
-- Date: 2011-11-02 09:39
*/
INSERT INTO `tblhotelanguages` (`Field`,`Type`,`Null`,`Key`,`Default`,`Extra`) VALUES ('tblHotelLanguages_id','int(11)','NO','PRI',NULL,'auto_increment');
INSERT INTO `tblhotelanguages` (`Field`,`Type`,`Null`,`Key`,`Default`,`Extra`) VALUES ('language_id','int(11)','YES','',NULL,'');
INSERT INTO `tblhotelanguages` (`Field`,`Type`,`Null`,`Key`,`Default`,`Extra`) VALUES ('hotel_id','int(11)','YES','',NULL,'');
您有數據庫模式嗎? –
我使用這個「AND f.hotelId = hf.hotelId」將db模式附加到了我的問題 – paulus