2010-03-24 26 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