2010-03-24 21 views
0

我正在研究以PHP/MySQL开发的问题管理系统。 它需要搜索功能,用户将提及搜索参数,并根据这些参数系统将返回结果集。使用函数自变量来动态生成查询

为了解决这个问题,我试图编写一个函数,所有用户选择的参数都作为参数传递。根据参数我将动态生成查询。有时(根据用户做出的选择)这些参数中的一个或多个参数可能为空。

示例查询:

 
    select * from 
     tickets 
     inner join ticket_assigned_to 
      on tickets.id=ticket_assigned_to.ticket_id 
    where 
     tickets.project_id= in ('') 
     and tickets.status in ('') 
     and ticket_assigned_to.user_id in ('') 
     and tickets.reporter_user_id='' 
     and tickets.operator_user_id in ('') 
     and tickets.due_date between '' and '' 
     and tickets.ts_created between '' and ''; 

我还需要处理这里的参数可以进行或运算或查询相与案件。

例如:

 
    select * 
    from 
     tickets 
     inner join ticket_assigned_to 
      on tickets.id=ticket_assigned_to.ticket_id 
    where 
     tickets.project_id= in ('') 
     and tickets.status in ('') 
     or tickets.due_date = '' 
     or tickets.ts_created between '' and ''; 

我还计划使用在其他地方同样的功能项目也。 喜欢显示用户的所有门票或在给定日期之间创建的所有门票等...

如何处理这种情况?
我应该用一个处理所有这些或许多小功能的函数吗? 这里需要指导。

回答

1

我不认为直接将用户serach查询转换为mysql查询是一个好主意。基本上,你只是变得更容易反对SQL注入。

我建议使用一个抽象层像PHP ActiveRecord和搜索也许像Sphinx全文搜索引擎,它有它自己的高级查询方式,在那里你可以通过@author PeterSam | Martha查询。

+0

即使删除了搜索功能从图片中,我仍然需要回答像.......这样的问题1.显示分配给我的所有问题,并且status ='open'或者2.在给定项目中创建的所有问题自l一个月分配给我,并打开...等等..所以我仍然需要有这些功能(S)。 – Varun 2010-03-24 07:51:04

+0

Sphinx会在MySQL上进行全文搜索,因为他可以为索引列指定条件,MySQL适合在这里。大多数票务系统使用RDBMS,例如trac使用sqlite – 2010-03-24 10:27:52