所以这是我当前运行sql语句的代码:
$sql= "SELECT * FROM contractor WHERE CONCAT( FIRSTNAME,' ', LASTNAME,' ', ARRIVAL,' ', ID, ' ', DRIVERL ) like '%$searchTerm%' GROUP BY DRIVERL";
$query = mysql_query($sql);
$count=mysql_num_rows($query);
if(($count)>=1)
{
$output = "";
while($row = mysql_fetch_array($query))
{
$output .= '<a href="'.'http://localhost/contractor/redirectcontractorpage.php'.'?userid='.$row['id'].'">
First Name: '.$row['FIRSTNAME'].'<br />
Last Name: '.$row['LASTNAME'].'<br />
Arrival: '.$row['ARRIVAL'].'<br />
DL: '.$row['DRIVERL'].'<br />
Company: '.$row['COMPANY'].'<br /><br /></a>';
}
echo $output;
}
else
echo "There was no matching record for the name " . $searchTerm;
}
例如我打印名称为joe的所有结果。 名字:calvin 姓氏:乔 到货时间:2014-06-24 14:20:07 DL:kahisds8687 公司:aerotek
名字:凯文 姓氏:乔 到货时间:2014-06-24 14:09:24 DL:kahisds8687 公司:aerotek
名字:凯文 姓氏:乔 到货时间:2014-06-24 14:07:02 DL:kahisds8687 公司:aerotek
名字:乔 姓氏:aef 到货时间:2014-06-24 14:46:34 DL:jior21r3 公司:asfsad
名字:凯文 姓氏:乔 到货时间:2014-06-24 14:04:13 DL:kahisds8687 公司:aerotek
相反,我想根据重复的dl打印名称,但名称是相同的。所以我该怎么做才能调整sql查询,我尝试使用distinct但是我遇到了错误。
更新: 所以我期待在表格中查询。我想打印每一个乔,即使名字和姓氏相同(或不是),但仅仅基于driverL#。因此,如果有一个Joe Smith和一个Joe James并且我搜索了joe,那么每个的所有记录(可能很多因为它们可以进入和出去)都可以存在。我想打印其中一个,无论是最早的还是最新的到货日期,都不是我担心的。我更想尝试打印每个案例,以便我可以继续使用正确的个人申请。这种方式目前我将打印所有情况(例如,如果他们在过去一个月中多次输入,则可以是一吨)。所以我真的想基于driverL进行打印,当然还要根据搜索的内容与searchterm相关。
名字:凯文 姓氏:乔 到货时间:2014-06-24 14:20:07 DL:kahisds8687 公司:aerotek
名字:凯文 姓氏:乔 到货时间:2014-06-24 14:09:24 DL:kahisds8687 公司:aerotek
名字:凯文 姓氏:乔 到货时间:2014-06-24 14:07:02 DL:kahisds8687 公司:aerotek
名字:乔 姓氏:aef 到货时间:2014-06-24 14:46:34 DL:jior21r3 公司:
名字:凯文 姓氏:乔 到货时间:2014-06-24 14:04:13 DL:kahisds8687 公司:aerotek
当前声明:$ sql =“SELECT * FROM承包商WHERE CONCAT(FIRSTNAME,'',LASTNAME,'',ARRIVAL,'',ID,'',DRIVERL),如'%$ searchTerm%'GROUP BY DRIVERL” ;
我希望每个人中只有一个人能够如此理想地打印出来:
名字:乔 姓氏:aef 到货时间:2014-06-24 14:46:34 DL:jior21r3 公司:
名字:凯文 姓氏:乔 到货时间:2014-06-24 14:04:13 DL:kahisds8687 公司:aerotek
答案 0 :(得分:0)
现在sql没有看到所有的calvin joe条目都是重复的。这是因为在不同结果之间存在至少一个不同的字段。在这种情况下,这是到达值。第一个calvin joe在到达时存储2014-06-24 14:20:07
,而第二个calvin joe有2014-06-24 14:09:24
。秒是不同的,sql永远不会看他们相同。有几种方法可以解决这个问题。
解决这个问题的第一种方法是时间无关紧要。然后,您可以使用
Select distinct firstname,
lastname,
cast(arrival as date),
dl,
company
From ...
这样做是告诉sql只应该使用到达的日期部分。然后,sql仅选择其中至少一个列值与包含的其他数据不同的数据点。在这种情况下,它会将所有卡尔文商业的所有到货人数转换为2014-06-24。然后calvin joe将只被选中一次。
让我们说一分钟你的数据是关于飞机的。也许你确实需要一个时间列出。在这种情况下,您需要确定如何选择该时间。也许你想要最早的时间出现,也许你想要最新的时间出现。在下一个例子中,我将展示最新的时间。
Select firstname,
lastname,
max(arrival),
dl,
company
FROM contractor
WHERE CONCAT( FIRSTNAME,' ', LASTNAME,' ', ARRIVAL,' ', ID, ' ', DRIVERL ) like '%$searchTerm%'
GROUP BY firstname,
lastname,
dl,
company
此查询告诉sql我们希望将具有相同名字,姓氏,dl和公司的所有数据点显示为一个数据点。然后,sql查看所有到达并选择最有时间向用户显示的到达。这称为聚合函数。此查询仅显示一次calvin joe,并将选择2014-06-24 14:20:07
作为到达值。