gpt4 book ai didi

php - 如何检查与每行中唯一数据关联的mysql表中多行中的值

转载 作者:行者123 更新时间:2023-11-29 02:00:34 26 4
gpt4 key购买 nike

我正在使用 php 开发一个记录管理应用程序。我设计了一个名为 records 的表,其中包含字段 idrecordnamerecordvaluerecordid。例如,如果一条记录包含 3 个数据 firstnamelastnamegender。 3个数据(John Doe Male, Jane Doe Female and Sherlcok Holmes Male)插入表格如下-

----+-------------+--------------+-----------
id | recordname | recordvalue | recordid
----+-------------+--------------+-----------
1 | firstname | John | 001
2 | lastname | Doe | 001
3 | gender | Male | 001
4 | firstname | Jane | 002
5 | lastname | Doe | 002
6 | gender | Female | 002
7 | firstname | Sherlock | 003
8 | lastname | Holmes | 003
9 | gender | Male | 003

----+-------------+--------------+-----------

我的问题是当我要在表中插入一条新记录时,我需要检查是否有任何重复的记录。这意味着可以随时复制不同记录的任何字段,但不能复制记录中具有相同值的所有字段。从前面的示例记录中,具有 John Doe Female、Jane Doe Male、Sherlock Doe Male 等值的记录是可以的,但再次插入 John Doe Male 不是预期的,它会给出错误。

如何使用 PHP 轻松实现这一点?

提前致谢。

最佳答案

我认为你应该修理你的 table ,它的设计真的很糟糕。应该是这样的

table
--------------------------------------------
record_id | firstname | lastname | gender

然后您可以使用唯一索引(名字、姓氏、性别)来控制它,如果您只想在您的数据库中保留它的话。

[编辑]

由于您无法更改数据库设计并且它使用 EAV 结构,您可以使用下面的查询来实现您要查找的内容。如果有或没有符合您条件的记录,此查询将返回。

SELECT a.recordvalue, b.recordvalue, c.recordvalue
FROM rec_eav a
INNER JOIN rec_eav b ON (b.recordid = a.recordid AND b.recordname = 'lastname' )
INNER JOIN rec_eav c ON (c.recordid = a.recordid AND c.recordname = 'gender' )
WHERE a.recordname = 'firstname'
AND a.recordvalue = 'John'
AND b.recordvalue = 'Doe'
AND c.recordvalue = 'Male'

关于php - 如何检查与每行中唯一数据关联的mysql表中多行中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16059040/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com