2013-10-17 42 views
0

嗨StackOverflow成員,試圖匹配的房間

我想解決一些朋友的代碼,但我沒有擺脫它。我們已經邁出了一步,但並不是確切的順序。先讓我解釋一下。

我們想創建一個匹配系統。但不是以用戶爲基礎,而是以實際房間爲基礎。比賽是由最大租金,最小平方米和選擇的城市。

現在我們創建了以下代碼,它輸出每個用戶及其相應的房間。

$members = $db->query("Select g.gFirstname, g.gLastname,g.gEmail, v.vMeter, v.vMaxrent, v.vWhen, v.vCity From users as g LEFT JOIN users_pref as v ON(g.gId=v.vGid)"); 

$count = $members->num_rows; 

while($fetch = $members->fetch_assoc()){ 
    echo '<br /><br />'; 
    echo 'Rooms found for: <strong>'.stripslashes($fetch['gFirstname']).' '.stripslashes($fetch['gLastname']).'</strong><br /><br />'; 
    $selectKamers = $db->query("Select * From rooms Where kWhen >= ".$fetch['vWhen']." AND kCity = ".$fetch['vCity']." AND kMeter >= '".$fetch['vMeter']."' AND kMaxrent <= ".$fetch['vMaxrent'].""); 

    while($kamer = $selectKamers->fetch_assoc()){ 
     echo '<h1>'.$kamer['kStreet'].' '.$kamer['kHomenumber'].'</h1>'; 
    } 
} 

此代碼爲我說,首先顯示所有用戶,而在下面的每個用戶的列,示出了每一個房間的使用者施加他的喜好相匹配。

現在的問題是。我們希望創建顯示所有房間的功能,並在其下方顯示與該房間相匹配的所有用戶。

也許是因爲缺乏洞察力,但有人可能會幫助我在路上如何嘗試實現這一目標?

我的數據庫表如下:

--users 
gId | gFistname | gLastname | gEmail 
1 | Bob  | Hope  | Email 
2 | John  | Doe  | Email 

--users_pref 
vGid | vMeter | vMaxrent | vWhen | vCity 
1 | 10  | 400  | time() | cityId 
2 | 20  | 500  | time() | cityId 

--rooms 
kWhen | kStreet | kHomenumber | kMeter | kMaxrent | kCity 
time() | street | 100   | 15  | 300  | cityid 
time() | street | 200   | 25  | 400  | cityid 

我想如果我錯過了什麼儘可能完整的與我的解釋,請讓我知道。

非常感謝提前!

Kevin。

+0

你看到LEFT JOIN? – Strawberry

+0

我不明白第1行的左連接與它有什麼關係。我無法將users_pref更改爲房間,因爲表格用戶和房間之間沒有連接標識。 – KevinH

+0

什麼是首選項表和房間表上的主鍵? – Strawberry

回答

0

與任何兼容的用戶考慮的所有客房以下...

DROP TABLE IF EXISTS users; 

CREATE TABLE users 
(user_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY 
,firstname VARCHAR(12) NOT NULL 
,lastname VARCHAR(12) NOT NULL 
,email VARCHAR(12) NOT NULL UNIQUE 
); 

INSERT INTO users VALUES 
(1 ,'Bob','Hope','Email1'), 
(2 ,'John','Doe','Email2'); 

DROP TABLE IF EXISTS user_preferences; 

CREATE TABLE user_preferences 
(user_id INT NOT NULL 
, city_id INT NOT NULL 
, date VARCHAR(30) NOT NULL 
, meter INT NOT NULL 
, maxrent INT NOT NULL 
, PRIMARY KEY(user_id,city_id,date) 
); 

INSERT INTO user_preferences VALUES 
(1,1,'time()',10,400),  
(2,1,'time()',20,500); 

DROP TABLE IF EXISTS rooms; 

CREATE TABLE rooms 
(city_id INT NOT NULL 
,street VARCHAR(12) NOT NULL 
,homenumber INT NOT NULL 
,date VARCHAR(30) NOT NULL 
,meter INT NOT NULL 
,maxrent INT NOT NULL 
,PRIMARY KEY(city_id,street,homenumber) 
); 

INSERT INTO rooms VALUES 
(1,'street',100,'time()',15,300), 
(1,'street',200,'time()',25,400); 

獲取列表一起,我們可以做到這一點...

SELECT r.*,u.* 
    FROM rooms r 
    LEFT 
    JOIN user_preferences ru 
    ON ru.city_id = r.city_id 
    AND ru.date = r.date 
    AND ru.meter <= r.meter 
    AND ru.maxrent >= r.maxrent 
    LEFT 
    JOIN users u 
    ON u.user_id = ru.user_id; 

+---------+--------+------------+--------+-------+---------+---------+-----------+----------+--------+ 
| city_id | street | homenumber | date | meter | maxrent | user_id | firstname | lastname | email | 
+---------+--------+------------+--------+-------+---------+---------+-----------+----------+--------+ 
|  1 | street |  100 | time() | 15 |  300 |  1 | Bob  | Hope  | Email1 | 
|  1 | street |  200 | time() | 25 |  400 |  1 | Bob  | Hope  | Email1 | 
|  1 | street |  200 | time() | 25 |  400 |  2 | John  | Doe  | Email2 | 
+---------+--------+------------+--------+-------+---------+---------+-----------+----------+--------+ 
+0

連接到用戶數據庫在此先感謝即時通訊測試它..我猜「ru」是「你」...? – KevinH

+0

好吧,非常感謝..它像魔術一樣工作..使連接查詢的新方法我不明白。感謝那! – KevinH