Сравнение 2-х таблиц mysql

У меня есть две таблицы (клиенты и недвижимость).
В таблице клиентов у меня есть личные данные клиента и его интересы.

Таблица «dbc_customers»:

+----+-------+-----------------+---------+------+--------+-----------+-----------+--------+
| id | name  |      email      | bedroom | bath | garage | min_price | max_price | status |
+----+-------+-----------------+---------+------+--------+-----------+-----------+--------+
|  1 | Maria | [email protected] |       4 |    2 |      0 | 0.00      | 0.00      |      1 |
|  2 | John  | [email protected]  |       4 |    0 |      0 | 0.00      | 0.00      |      1 |
|  3 | Julia | [email protected] |       0 |    0 |      0 | 0.00      | 0.00      |      1 |
|  4 | Ana   | [email protected]   |       0 |    0 |      0 | 0.00      | 0.00      |      0 |
+----+-------+-----------------+---------+------+--------+-----------+-----------+--------+

В таблице недвижимости у меня есть данные каждого зарегистрированного дома.

Таблица «dbc_posts»:

+----+------+---------+---------+------+--------+-------------+------------+--------+
| id | city | address | bedroom | bath | garage | total_price | year_built | status |
+----+------+---------+---------+------+--------+-------------+------------+--------+
|  1 |    3 | st 21   |       4 |    2 |      1 | 200.00      |       2010 |      1 |
|  2 |    3 | st 22   |       4 |    3 |      4 | 10.00       |       2000 |      1 |
|  3 |    3 | b 12    |       2 |    1 |      5 | 40.00       |       2014 |      1 |
|  4 |    2 | b 14    |       3 |    2 |      2 | 30.00       |       2013 |      1 |
+----+------+---------+---------+------+--------+-------------+------------+--------+

Мне нужно как-то сравнить интересы каждого покупателя с каждым домом и показать количество домов, совместимых с каждым покупателем, результат будет примерно таким:

Client1 || [email protected] || 4 properties compatible
Client2 || [email protected] || 7 properties compatible

Однако уже пробовал разные формы, я уже сломал голову, у меня уже были похожие результаты, но что-то всегда не так.

В этом коде ниже он правильно подсчитывает, сколько домов совместимо с каждым клиентом, но он также отображает клиентов с пустыми интересами, и мне нужно показать только клиентов, которые заполнили интересы, и показать совместимые дома с ними. Этот код работает, однако он отображает всех клиентов, даже если они с пустыми интересами.

Мой текущий код:

<?php
#Select all active customers and order by id desc
$query = mysql_query("SELECT * FROM dbc_customers WHERE status='1' ORDER BY id DESC") or die(mysql_error());
#No customers found
if (mysql_num_rows($query) < 1){
echo "No customers found!";
}
else {
#Set vars
$where="";
$i=1;
while ($row = mysql_fetch_object($query)) {
#Define "where" clause according to values of the table column
if (!empty($row->bedroom)) $where .= "bedroom='$row->bedroom' AND ";
if (!empty($row->bath)) $where .= "bath='$row->bath' AND ";
//if (!empty($row->garage)) $where .= "c.garage = p.garage AND ";
#Count all posts compatibles with each customer
$query2 = mysql_query("SELECT id FROM dbc_posts WHERE $where status='1'") or die(mysql_error());
#If none posts found break the loop, exit and show a message error, else show number of posts found
if (mysql_num_rows($query2) < 1){ break; exit; } else { $result = mysql_num_rows($query2); }
#Select only one post compatible for each customer
$query3 = mysql_query("SELECT DISTINCT id FROM dbc_posts WHERE $where status='1' LIMIT 1") or die(mysql_error());
#Flag for where var
if ($query2 and $query3) $where = "";
#Loop for each result of query3 and show customers and yours compatibles posts
while ($row3 = mysql_fetch_object($query3)) {
#Show customers
echo "<b>".$row->name."</b> || ".$row->email." || <a href='#'><b>".mysql_num_rows($query2)." properties compatible</b></a><br />";
}
}
#If none compatibles posts with customers was found
if ($result < 1){
echo "No listings were found compatible with any client!";
}
}
?>

Я считаю, что мой код может быть совершенно неверным из следующей переменной query3.

2

Решение

Я не понимаю, зачем вам вообще нужен query3. Кроме того, если вы прервитесь и выйдете из системы после того, как обнаружите, что клиент не имеет совместимых устройств, вы не увидите других клиентов, у которых все еще могут быть совместимые устройства, и не увидят никаких сообщений об ошибках. вместо этого вам нужно использовать «продолжить», чтобы перейти к следующему клиенту.

Попробуй это:

#Select all active customers and order by id desc
$query = mysql_query("SELECT * FROM dbc_customers WHERE status='1' ORDER BY id DESC") or die(mysql_error());
#No customers found
if (mysql_num_rows($query) < 1) echo "No customers found!";
else {
#Set vars
$where = "";
$total = 0;
while ($row = mysql_fetch_object($query)) {
#Define "where" clause according to values of the table column
if ($row->bedroom > 0) $where .= "bedroom='$row->bedroom' AND ";
if ($row->bath > 0) $where .= "bath='$row->bath' AND ";
#Count all posts compatibles with each customer
$query2 = mysql_query("SELECT id FROM dbc_posts WHERE $where status='1'") or die(mysql_error());
$count = mysql_num_rows($query2);
#If none posts found continue, else update total number of compatibles
if(!$count) continue;
else $total += $count;
#Show customers
echo "<b>".$row->name."</b> || ".$row->email." || <a href='#'><b>".$count." properties compatible</b></a><br />";
}
#If none compatibles posts with customers was found
if ($total < 1) echo "No listings were found compatible with any client!";
}

Кстати, зачем вам тег ‘a’ для совместимости?

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]