每次用戶登錄時,我都會保存一個ID。爲了限制程序的傳播,我希望允許每個用戶最多擁有3個設備。這種說法填補了DB與HardwareIDs使用SQL UPDATE返回PHP
SQL:
UPDATE license SET
hardwareID3 = CASE WHEN hardwareID1 IS NOT NULL AND
hardwareID2 IS NOT NULL AND
hardwareID3 IS NULL
THEN $hwid
ELSE hardwareID3 END,
hardwareID2 = CASE WHEN hardwareID1 IS NOT NULL AND
hardwareID2 IS NULL
THEN $hwid
ELSE hardwareID2 END,
hardwareID1 = CASE WHEN hardwareID1 IS NULL
THEN $hwid
ELSE hardwareID1 END
WHERE code = $lic AND $hwid NOT IN (COALESCE(hardwareID1,hardwareID2,hardwareID3, 0))
PHP:
$checkhwid = $VBPHP -> uphwid($hwid, $lic);
有2個問題:
當用戶用登錄第二個id(例如「2」)2次,值「2」也寫入hardwareID3列。
我想捕捉如果用戶嘗試使用第4個ID登錄並返回錯誤。可悲的是,我不能使用「true或false」ifs,因爲當用戶使用第一個ID登錄時,我會得到「true」的結果,如果他用ID 1多次登錄,我會變成false,因爲聲明沒有改變任何東西(什麼是正確的)。
我正在用盡想法。 在此先感謝。
停止。不要使用這種表格結構。使用存儲在子表中的硬件ID的標準化設計。這將防止您必須編寫完全可怕的查詢,並通過更改單個集中限制變量,讓您自由地增加未來的設備限制。因爲如果你想要第四,第五等等設備,你必須修改每個接觸設備表的單個查詢。 –
聽起來不錯,但不幸的是,我只是php和sql語句的小個子,並且不允許更改表格:無論如何,無論如何,什麼是「規範化設計」?第二張表只包含「join」這樣的硬件和SQL語句? – PoscheL
http://en.wikipedia.org/wiki/Database_normalization一般來說,你應該瞄準第三範式。有更高/更低的形式,但第三常態對於額外的工作訴訟來說是一個不錯的選擇。效率提高。 –