2011-05-10 85 views
1

我的表格:blocked_peoples成員。 在表blocked_peoplesIPS = 構件signup_ipphp mysql更新兩個表/列

比方說,我想阻止訪問我的網站的人。我通過他的IP阻止用戶,並且它也更新成員表格和列禁止與。

總之,如果我更新表blocked_peoples(列IPS)和它的結果發現/相同部件(柱signup_ip)在部件表更新柱上用1

有可能禁止?如果是的話,SQL將如何看起來像?

回答

1
UPDATE blocked_peoples, members 
    SET members.banned = 1 
WHERE members.signup_ip = blocked_peoples.ip 
    AND blocked_peoples.ip = 'ip.address.goes.here'; 

這是我能根據你的問題想出的最好的。雖然我不確定。在更新中使用兩個表是沒有意義的,因爲members表同時具有ip和「blocked」標誌。

0

步驟:

  • 首先使這兩個表引擎InnoDB的
  • 然後創建約束的外鍵引用ON UPDATE CASCADE ON DELETE CASCADE
  • parent_table(blocked_people值).IPs會參考孩子表(會員).signup_ip

欲瞭解更多信息,請閱讀外鍵參考。

樂於幫助:)

+0

參考:http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints .html – diEcho 2011-05-10 17:51:09

+0

InnoDB需要外鍵和引用鍵上的索引,以便外鍵檢查可以很快並且不需要表掃描。 – diEcho 2011-05-10 17:51:53

0

我會建議擺脫blocked_peoples表的完全如果到members的關係是1比1。否則,您應該從members中刪除banned列,並特別依賴blocked_peoples來檢查被禁止的IP。

實施例更新:

UPDATE `members` SET `banned` = 1 WHERE `signup_Ip` = '123.123.123.123'; 

示例選擇:

SELECT * FROM `members` WHERE `banned` = 1