rad*_*ins 5 sql select concat distinct
所以我将这个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."';";
Run Code Online (Sandbox Code Playgroud)
对我来说,似乎DISTINCT和CONCAT并没有很好地融合在一起.
问题是其他领域; DISTINCT适用于整个结果.可能最好的做法是分离查询或填充2个不同的数组; 如果您按名称进行ORDER,则只有在名称更改时才能通过复制到dest数组来删除重复项.
不要使用 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);";
Run Code Online (Sandbox Code Playgroud)
如果可以在外面访问,还要小心 $school 和 $roomate 中的 XSS。
Distinct 与所有列的整行有关,而不仅仅是名称部分......因此,如果约会在不同的日期/时间、地点等,它们都会出现。如果您只想显示 NAME 部分,请删除其余的其他内容。选择人员后查询可用的约会。