php - 尝试与房间匹配

标签 php mysql match

StackOverflow 成员(member)大家好,

我正在尝试修复 friend 的一些代码,但我无法摆脱它。我们已经朝着这个目标迈出了一步,但这并不是确切的顺序。我先解释一下。

我们想要创建一个匹配系统。但不是基于用户基础,而是基于实际房间基础。匹配是根据最高租金、最小平方米和选择的城市进行的。

现在我们创建了以下代码,该代码输出每个用户及其匹配的房间。

$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

我的解释尽可能完整,如果我遗漏了什么,请告诉我。

非常感谢!

凯文。

最佳答案

考虑以下...

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 |
 +---------+--------+------------+--------+-------+---------+---------+-----------+----------+--------+

关于php - 尝试与房间匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19422963/

相关文章:

java - 等于和包含有什么区别

php - 在中间件之后执行服务提供者

php - 显示html/php所有特殊字符

javascript - 匹配并用四个空格替换行首的所有制表符

php - MySQL 日期范围查询适用于 Sequel Pro,但不适用于 PHP (DataTables)

c# - 使用包含 MySQL 数据库表的 c# 填充下拉列表

正则表达式字符串匹配所有未包装的内容

php - 生成 500 万个唯一代码

php - 夏令时变化时,filemtime 可以与 strtotime 进行比较吗?

php - 尝试用 php 发送 mysql 信息