我有一个名为“victim”的表的数据库。将信息转储到表中的表单有两个受害者的空间,因此有vic1_fname,vic1_lname,vic2_fname,vic2_lname等。(业务名称,人员优先,人员姓名,地址,城市,州,邮编)“1 “和”2“各自。现在我想搜索数据库并查找列出的受害者。
这是我到目前为止所做的:
$result = mysql_query(
"SELECT victim.*
FROM victim
WHERE vic1_business_name OR vic2_business_name LIKE '%$search_vic_business_name%'
AND vic1_fname OR vic2_fname LIKE '%$search_vic_fname%'
AND vic1_lname OR vic2_lname LIKE '%$search_vic_lname%'
AND vic1_address OR vic2_address LIKE '%$search_vic_address%'
AND vic1_city OR vic2_city LIKE '%$search_vic_city%'
AND vic1_state OR vic2_state LIKE '%$search_vic_state%'
AND vic1_dob OR vic2_dob LIKE '%$search_vic_dob%'
");
<table width="960" style="border: groove;" border=".5">
<tr><th colspan=10>You search results are listed below:</th></tr>
<tr>
<th>Case Number</th>
<th>Business Name</th>
<th>First Name</th>
<th>Last Name</th>
<th>DOB / Age</th>
<th>Address</th>
<th>City</th>
<th>State</th>
</tr>
<?php
while($row = mysql_fetch_array($result))
{ ?>
<tr>
<td align="center"><?php print $row['vic_business_name']; ?></td>
<td align="center"><?php print $row['vic_fname']; ?></td>
<td align="center"><?php print $row['vic_lname']; ?></td>
<td align="center"><?php print $row['vic_dob']; ?></td>
<td align="center"><?php print $row['vic_adress']; ?></td>
<td align="center"><?php print $row['vic_city']; ?></td>
<td align="center"><?php print $row['vic_state']; ?></td>
</tr>
<?php } ?>
</table>
在我将表格更改为此之前,信息未显示在表格中:
<tr>
<td align="center"><?php print $row['vic1_business_name']; ?></td>
<td align="center"><?php print $row['vic1_fname']; ?></td>
<td align="center"><?php print $row['vic1_lname']; ?></td>
<td align="center"><?php print $row['vic1_dob']; ?></td>
<td align="center"><?php print $row['vic1_adress']; ?></td>
<td align="center"><?php print $row['vic1_city']; ?></td>
<td align="center"><?php print $row['vic1_state']; ?></td>
</tr>
<tr>
<td align="center"><?php print $row['vic2_business_name']; ?></td>
<td align="center"><?php print $row['vic2_fname']; ?></td>
<td align="center"><?php print $row['vic2_lname']; ?></td>
<td align="center"><?php print $row['vic2_dob']; ?></td>
<td align="center"><?php print $row['vic2_adress']; ?></td>
<td align="center"><?php print $row['vic2_city']; ?></td>
<td align="center"><?php print $row['vic2_state']; ?></td>
</tr>
现在它显示两行,即使它是空的。如果受害者最初被列为vic1或vic2并不重要,我只想知道他们是否是受害者。
我希望这是有道理的。无论你是vic1还是vic2,我都无法逐行显示我想要的方式。
答案 0 :(得分:2)
你不能写那样的查询。
WHERE ((vic1_business_name LIKE '%$search_vic_business_name%') OR
(vic2_business_name LIKE '%$search_vic_business_name%')) AND
....
答案 1 :(得分:1)
您应该考虑将其置于第一范式。在某些时候,3名受害者将发生一起事故!这样也可以让您的搜索查询更轻松。
因此,您的受害者表格的结构类似于
caseid (or whatever)
victimid
business_name
fname
lname
address
city
state
dob
修改在评论中进行讨论。
你说“当我找到你的名字时,我发现你一直是受害者。”这意味着您可能会多次存储受害者的详细信息,并且每次可能会略有不同。
这肯定远非理想,并且似乎可以从应用规范化原则中受益,但它实际上取决于您的应用程序的范围。
如果它基本上只是一个用于记录在纸质表格上输入的值的系统(无论它们是什么),并且不尝试将这些值链接在一起并解决任何此类差异,那么您可能对所获得和使用的内容没有问题Ignacio's answer中的语法。这将解决你实际问的问题!
替代方案更灵活,但可能会增加很多不必要的复杂性。
答案 2 :(得分:1)
我认为OR
是一个严格的布尔运算符,因此不能用于返回LIKE
匹配的字符串。您必须复制所有表达式,即更改
AND vic1_fname OR vic2_fname LIKE '%$search_vic_fname%'
到
AND vic1_fname LIKE '%$search_vic_fname%' OR vic2_fname LIKE '%$search_vic_fname%'
但是,正如Martin Smith和knittl所说的那样,这是一个非常不灵活且难以使用的解决方案!您最好尝试的是创建单独的incidents
和victims
表,并为victims
表提供一个incident_id
表,将其连接到事件。这样,您就可以为事件分配任意数量的受害者。 (也可以制作一个允许受害者出现在多个事件中的系统,但这涉及一个额外的表。)
答案 3 :(得分:1)
那些受害者应该在桌子上真正分开......
目前,让它快速运转的唯一方法是使用:
SELECT ...
FROM victim
WHERE vic1_business_name LIKE '%$search_vic_business_name%' -- etc.
UNION
SELECT ...
FROM victim
WHERE vic2_business_name LIKE '%$search_vic_business_name%' -- etc.
但它很麻烦而且不可取。一个单独的表受害者,将victim_relations表连接在一起就可以解决这个问题。
答案 4 :(得分:1)
您可以先尝试让受害者成为更有用的形式:
((SELECT vic1_business_name, vic1_fname, vic1_lname, vic1_address, vic1_city, vic1_state, vic1_dob)
UNION
(SELECT vic2_business_name, vic2_fname, vic2_lname, vic2_address, vic2_city, vic2_state, vic2_dob))
在FROM
表达式中使用它应该会为您提供所有受害者的列表,每行一个。