每次用户登录时,我都会保存一个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一般来说,你应该瞄准第三范式。有更高/更低的形式,但第三常态对于额外的工作诉讼来说是一个不错的选择。效率提高。 –