所以我将这个SQL的结果提供给一个数组。该数组稍后将成为在键入时操作的文本框的建议。我希望它只返回每个名字1次,即使这个人有多个约会。目前,这将返回具有该名称的人的所有约会,因此如果“Brad Robins”有5个约会,并且我开始键入“Brad”,则会在建议中显示“Brad Robins”5次,而不是仅显示一次。
$sql = "SELECT DISTINCT CONCAT(clients.studentFirstName, ' ', clients.studentLastName) AS name, appointments.location, appointments.subLocation, appointments.appointmentAddress1, appointments.appointmentAddress2, appointments.appointmentCity, appointments.appointmentState, appointments.appointmentZip, appointments.startTime, appointments.endTime, appointments.date, clients.school
FROM appointments JOIN clients
ON appointments.clientID = clients.clientID
WHERE CONCAT(clients.studentFirstName, ' ', clients.studentLastName) = '".$roommate."' AND clients.school = '".$school."';";
对我而言,看起来DISTINCT和CONCAT并没有很好地融合在一起。
答案 0 :(得分:5)
问题在于其他领域; DISTINCT适用于整个结果。可能最好的做法是分离查询或填充2个不同的数组;如果您按名称进行ORDER,则只有在名称更改时才能通过复制到dest数组来删除重复项。
答案 1 :(得分:4)
请勿使用DISTINCT,请使用group by:
$sql = "SELECT CONCAT(clients.studentFirstName, ' ', clients.studentLastName) AS name, appointments.location, appointments.subLocation, appointments.appointmentAddress1, appointments.appointmentAddress2, appointments.appointmentCity, appointments.appointmentState, appointments.appointmentZip, appointments.startTime, appointments.endTime, appointments.date, clients.school
FROM appointments JOIN clients
ON appointments.clientID = clients.clientID
WHERE CONCAT(clients.studentFirstName, ' ', clients.studentLastName) = '".$roommate."' AND clients.school = '".$school."' group by CONCAT(clients.studentFirstName, ' ', clients.studentLastName);";
如果可以在外面访问,也要小心$ school和$ roomate中的XSS。
答案 2 :(得分:3)
区别于所有列的整行,而不仅仅是名称部分...因此,如果约会在不同的日期/时间,地点等,它们都会出来。如果要显示的只是NAME部分,请删除其他内容。在选择一个人之后查询可用的约会。
答案 3 :(得分:1)
您可以使用
group by name
最后,这将导致查询只返回每个名称中的一个,但是在客户端有多个约会的情况下,您无法预测将返回哪些约会结果,并且查询停止非常有用。
正如其他人所指出的那样,你应该在选择客户后获得约会清单。
答案 4 :(得分:0)
选择不同的concat(....) 来自....
答案 5 :(得分:0)
select colA||' - '||colB
from table1
where colA like 'beer%'
group by colA||' - '||colB
order by colA||' - '||colB
;
答案 6 :(得分:0)
我知道它的回复很晚,有人可能会发现此用法已满
尝试在DISTINCT
之后使用CONCAT
示例:
$sql = SELECT CONCAT(DISTINCT clients.studentFirstName ...
答案 7 :(得分:0)
SELECT DISTINCT MD5(CONCAT(clients.studentFirstName, ' ', clients.studentLastName)) as id, appointments.location, appointments.subLocation, ...