【发布时间】:2011-06-02 09:54:40
【问题描述】:
我在尝试搜索时遇到了一些问题。目前,这只会返回在 maintenance_parts 表中至少有 1 行的结果。即使有 0 个部分行,我也希望它返回结果。
我的第二个问题是,当您搜索车辆时,它应该返回多个结果(多个维护行),它只会返回该车辆的 1 个结果。
一些背景信息: 用户有 2 个字段要填写。这些字段是车辆和关键字。车辆字段旨在允许根据品牌、型号、VIN、卡车号码(通常是 2 - 3 位数字或字母前缀后跟 2 位数字)以及属于卡车表的一些其他字段进行搜索。关键字用于搜索维护和维护零件表中的大多数字段(例如工作描述、零件名称、零件编号)。
maintenance_parts 表的每个维护行可以包含 0、1 或更多行。对于每个维护行,卡车表正好包含 1 行。一辆卡车可以有多个维修记录。
"SELECT M.maintenance_id, M.some_id, M.type_code, M.service_date, M.mileage, M.mg_id, M.mg_type, M.comments, M.work_done,
MATCH( M.comments, M.work_done) AGAINST( '$keywords' ) +
MATCH( P.part_num, P.part_desc, P.part_ref) AGAINST( '$keywords' ) +
MATCH( T.truck_number, T.make, T.model, T.engine, T.vin_number, T.transmission_number, T.comments) AGAINST( '$vehicle' )
AS score
FROM maintenance M, maintenance_parts P, truck T
WHERE M.maintenance_id = P.maintenance_id
AND M.some_id = T.truck_id
AND M.type_code = 'truck'
AND (
(MATCH( T.truck_number, T.make, T.model, T.engine, T.vin_number, T.transmission_number, T.comments) AGAINST( '$vehicle' )
OR T.truck_number LIKE '%$vehicle%')
OR MATCH( P.part_num, P.part_desc, P.part_ref) AGAINST( '$keywords' )
OR MATCH( M.comments, M.work_done) AGAINST( '$keywords' )
)
AND M.status = 'A' GROUP BY maintenance_id ORDER BY score DESC, maintenance_id DESC LIMIT 0, $limit"
【问题讨论】: