我正在尝试为我的数据库创建一个搜索表单,用户可以在其中搜索客户名称,并显示所有客户地址。我的结构看起来像这样
客户表
地址表
网站表
我将第一个,最后一个或公司名称作为输入,并将其存储为变量以及要搜索的列,然后使用以下查询检查数据库是否符合匹配条件
$data = mysql_query("SELECT * FROM customer INNER JOIN address ON customer.ID = address.Customer_ID INNER JOIN sites ON address.ID = sites.address_ID WHERE upper(customer.$field) LIKE'%$query%'") ;/
我使用
打印结果 while($results = mysql_fetch_array($data)){
echo "<br>";
echo $results['First_Name'];
echo " ";
echo $results['Surname'];
echo $results['town'];
echo " ";
echo $results['postcode'];
当一个客户有多个地址时,会出现问题。家庭住址和不同的网站地址。查询只会打印其中一个地址,即站点地址(第二次提交并且似乎覆盖了家庭地址)
地址表中的这两个地址都包含相同的Customer_ID,如何才能显示它们而不仅仅是一个?
答案 0 :(得分:0)
您需要使用搜索查询来查找客户,然后返回并获取该特定客户的所有记录。作为子查询这样做应该可以解决问题:
SELECT ...
FROM Customer
INNER JOIN address ON customer.ID = address.Customer_ID
INNER JOIN sites ON address.ID = sites.address_ID
WHERE Customer.ID IN (SELECT ID
FROM customer
INNER JOIN address ON customer.ID = address.Customer_ID
INNER JOIN sites ON address.ID = sites.address_ID
WHERE upper(customer.$field) LIKE'%$query%')
答案 1 :(得分:0)
我认为连接SITES时应该使用LEFT OUTER JOIN。如果您使用INNER JOIN,则会丢失其ID不在sites.address_id中的ADDRESS记录。