这是我当前的SQL查询的“实例的版本”:MySQL如何根据用户输入的顺序来连接表?
SELECT DISTINCT files.* FROM vw_files files
LEFT JOIN tbl_file_ext fext
ON files.id = fext.fileID
INNER JOIN tbl_extensions ext ON fext.extensionID = ext.id
WHERE ext.extension = 'exe' OR ext.extension = 'com'
的WHERE
子句通过输入一个逗号分隔的字符串用户驱动。
我想什么是通过输入命令/组,这样说,如果用户输入:
com, exe, jpg
WHERE子句将是:
WHERE ext.extension = 'com' OR ext.extension = 'exe' OR ext.extension = 'jpg'
的结果需要由优先级进行排序的输入是这样的:
File1 com exe jpg
File2 com exe jpg
File3 com exe
File4 com jpg
File5 com
的WHERE
子句经由PHP构造,但我怎样才能构建ORDER
或GROUP
条款将根据usrs输入的优先级来调整结果。根据要求
编辑----
以上只是一个例子,我说,和我做类似的东西计算器也没觉得合适。然而,真正的设置如下:
tbl_solutions - ID,AUTHORID,ip地址,标题,问题,dateAdded,锁定,积极
tbl_solution_tags - ID,FK solutionID,FK标签识别
tbl_solution_files - ID,FK solutionID,FK FILEID
vw_solution_and_file - 用户名,ID(溶液ID),AUTHORID,ip地址,标题,问题,dateAdded,锁定,活性,文件名,档案大小,取出,公共
个select sol.*, files.fileName, files.fileSize, files.removed, files.public from
tbl_solutions sol left join
tbl_files files on (select sf.fileID from tbl_solution_files sf
where sf.solutionID = sol.id) = files.id;
vw_solution_file_tags - 与上述相同,但也返回标签
SELECT sf.*,GROUP_CONCAT(tags.tag SEPARATOR ', ') as 'tags' FROM
vw_solution_and_file sf LEFT JOIN tbl_solution_tags st
ON sf.id = st.solutionID INNER JOIN tbl_tags tags
ON st.tagID = tags.id GROUP BY sf.id
从vw_solution_file_tags输出示例:
用户名ID AUTHORID ip地址标题问题dateAdded锁定有源文件名档案大小除去公共标签
craig 24 81 127.0.0.1“A标题”“问题”2012-01-01 0 1 NULL NULL NULL 1 C++,ASP,gdb
克雷格25 81 127.0.0.1 “B标题” “B的问题” 2012-01-01 0 1 NULL NULL NULL 1个C++,ASP时,Windows
所以此刻所有我做的是使用vw_solution_file_tags在我的页面中,但用户将能够在标签上应用过滤器。所以他可能会说ASP,Windows,所以上面的两个结果都会显示。但他们需要按用户输入的优先顺序排列。
所以我想在我的PHP查询中使用的代码将类似于vw_solution_file_tags,但只有标签匹配用户输入并按该输入排序的位置。
如果您可以通过PHP构造WHERE子句,为什么不能构造ORDER或GROUP BY子句? – 2012-01-12 08:19:20
试一下'ORDER BY ext.extension ='com'DESC,ext.extension ='exe'DESC,ext.extension ='jpg'DESC' – bububaba 2012-01-12 08:20:42
这不会给所有的COM然后EXE然后JPG吗?我需要“com exe jpg”,“com exe”,“com,jpg”,“exe,jpg”,然后com-exe-.jpg等 – 2012-01-12 08:27:16