2012-05-21 79 views
0

我想刪除我的表中的條目。一旦刪除它,它將級聯到對象表。不用擔心,如果我通過使用簡單的DELETE刪除條目,它就可以工作。但是,我需要指定一些條件:內部加入表時執行刪除

PAGES

+--------------------------+--------------+------+-----+---------+----------------+ 
| Field     | Type   | Null | Key | Default | Extra   | 
+--------------------------+--------------+------+-----+---------+----------------+ 
| page_id     | int(11)  | NO | PRI | NULL | auto_increment | 
| users_id     | int(11)  | NO | MUL | NULL |    | 
| page_value    | varchar(20) | NO | UNI | NULL |    | 
+--------------------------+--------------+------+-----+---------+----------------+ 

OBJECTS

+----------------------------+-------------+------+-----+---------+----------------+ 
| Field      | Type  | Null | Key | Default | Extra   | 
+----------------------------+-------------+------+-----+---------+----------------+ 
| objects_id     | int(11)  | NO | PRI | NULL | auto_increment | 
| page_id     | int(11)  | NO | MUL | NULL |    | 
| objects_name    | varchar(50) | NO |  | NULL |    | 
| objects_avail    | varchar(20) | NO |  | NULL |    | 
+----------------------------+-------------+------+-----+---------+----------------+ 

如果objects_avail == "ALL",我一定不包括級聯刪除的條目。我想出了這個SQL查詢,但得到了一個錯誤:爲PDO的佔位符

["42000",1064,"You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AS p INNER JOIN objects AS o ON p.page_id = o.page_id WHER' at line 1"]

示例值:

$query = " 
    DELETE FROM pages AS p 
    INNER JOIN objects AS o ON p.page_id = o.page_id 
    WHERE p.page_id = ? 
     AND p.users_id = ? 
     AND p.page_value = ? 
     AND o.objects_avail != ?"; 

引發的錯誤

$params = array(81,5,"main page","ALL");

,所有的這是有效的,我相信這不是問題所在。

我懷疑或prettry確定我錯過了一些在我的查詢,請提出任何建議?

+0

嘗試使用這個$查詢=「DELETE FROM AS 'P' INNER JOIN對象作爲o在 'P' 或 '頁'。 'PAGE_ID'= 'o'。'page_id'WHERE'p'。'page_id'=?AND'p'。'users_id'=?AND'p'。'page_value'=?AND'o'。'objects_avail'!=?「; –

回答

2

對於內部連接UPDATE或DELETE,您需要指定您明確想要刪除哪個表,否則解析器將不知道您的意思。您可以選擇一個或多個表格進行刪除。在你的情況下,刪除頁面的別名p是有意義的。

DELETE p 
FROM pages AS p 
INNER JOIN objects AS o ON p.page_id = o.page_id 
WHERE 
    p.page_id = ? AND 
    p.users_id = ? AND 
    p.page_value = ? AND 
    o.objects_avail != ? 

我改變的是刪除只行成爲DELETE p

+0

另請注意,這是MySQL特有的語法,可能不會傳遞給其他RDBMS。 – Jordan

+0

謝謝你,這擺脫了錯誤。但是,它確實刪除了具有'ALL'可用性值的行,這絕對不是因爲我指定了'!=「ALL」'。 –

+0

你可以發佈你的PHP代碼嗎?上面的查詢是正確的,只是您的參數沒有正確傳入。 – Jordan