我想通過AJAX向PHP數據庫發送查詢(到PHP後端)。我有4個表格:公司,用戶,發票,發票。最重要的關係如下:如何將條件插入SQL SELECT?
Users.Company_ID -> Companies.ID
Invoices.Company_ID -> Companies.ID
Invoice_Lines.Invoice_ID -> Invoices.ID
我已經用PHP編寫一個簡單的解析器會分手提交的SQL查詢到它的組件(列,表和條件)。
我希望用戶能夠直接編寫查詢了,但讓所有的信息由登錄用戶的公司ID的限制,他們提交給SQL Server之前對其進行修改。例如:
SELECT Users.ID, Users.Name, Users.Email
FROM Users
我想查詢成爲:
SELECT Users.ID, Users.Name, Users.Email
FROM Users
WHERE Users.Company_ID = X
在一個更復雜的例子:
SELECT Invoice_Lines.Subtotal
FROM Invoice_Lines
WHERE Invoice_Lines.Invoice_ID = 4
變爲
SELECT Invoice_Lines.Subtotal
FROM Invoice_Lines
INNER JOIN Invoices ON (Invoice_Lines.Invoice_ID = Invoice.ID)
INNER JOIN Company ON (Invoice.Company_ID = Company.ID)
WHERE Invoice_Lines.Invoice_ID = 4 AND Company.ID = X
似乎很清楚,我將不得不創建表的別名因爲它已經被寫入,所以不會與該陳述發生衝突。我不確定如何去分析查詢來決定什麼是最有效的方法來限制輸入。
我打算只支持SQL的一個子集(與別名直接表列,左,表和別名和簡單表達哪裏內部連接)。
橡膠迴避這裏大多是?不知道我得到了真正的問題 - 似乎你描述瞭解決方案。我做過類似的項目很多次,發現其爲「SQL」一個面向對象的接口可能是有用的。 ['Zend_Db_Select'](http://framework.zend.com/manual/1。12/en/zend.db.select.html)。主要的好處是,可以根據'from'和'joins'構建完整的SQL語句,然後根據查詢中使用的實際列,只加入它所需的內容。 – ficuscr 2013-03-01 19:10:25
我知道輸入和輸出,但我在分析部分遇到問題。我可以手動爲任何查詢做到這一點,但我無法想象將爲我轉換它的一般算法。我可能最終會添加一大堆INNER JOIN。 – Martin 2013-03-01 19:16:41