如何使用PHP和Mysql从数据库中获取数据比较某些值

如何使用PHP和Mysql从数据库中获取数据比较某些值,php,mysql,Php,Mysql,我有些怀疑。实际上,我需要通过使用PHP和MySQL连接两个表来根据列值获取数据 db_特价: 基本数据库: 在这里,我需要从表db_basic中获取与第一个表中的酒相关的所有数据。我在下面解释我的代码 $res=mysqli_query($connect,"select b.id,b.special_id,b.name,s.type from db_basic as b inner join db_specials as s on b.special_id=s.id where b.speci

我有些怀疑。实际上,我需要通过使用PHP和MySQL连接两个表来根据列值获取数据

db_特价:

基本数据库:

在这里,我需要从表
db_basic
中获取与第一个表中的酒相关的所有数据。我在下面解释我的代码

$res=mysqli_query($connect,"select b.id,b.special_id,b.name,s.type from db_basic as b inner join db_specials as s on b.special_id=s.id where b.special_id=2 order by b.id desc");

while($row=mysqli_fetch_array($res)){
   $data[]=$row;
}
我也得到了正确的数据。这里的问题是
db_specials
在前端还具有插入的删除功能。假设用户删除了
db_specials
表中id=2的行并再次插入,在这种情况下,
id
将从2变为3。因此,查询也需要相应地更改。在这里,我需要知道什么应该是最好的逻辑,这样每次用户都不会改变查询,如果任何特价被删除并再次插入。请帮帮我。

您应该依赖db_specials表的type列,而不是id列,因为它不会对每个
插入操作自动递增。因此,您的查询应该如下所示:

select b.id,b.special_id,b.name,s.type 
from db_basic as b 
inner join db_specials as s 
on b.special_id=s.type 
where b.special_id=2 
order by b.id desc
+------+------+------+
|  id  | type | name |
+------+------+------+
|      |      |      |
select b.id,b.type,b.name
from db_basic as b 
inner join db_specials as s 
on b.type=s.type 
where b.type=2 
order by b.id desc

另外,我建议您将db_basic table的特殊_id列名更改为type,如下所示:

select b.id,b.special_id,b.name,s.type 
from db_basic as b 
inner join db_specials as s 
on b.special_id=s.type 
where b.special_id=2 
order by b.id desc
+------+------+------+
|  id  | type | name |
+------+------+------+
|      |      |      |
select b.id,b.type,b.name
from db_basic as b 
inner join db_specials as s 
on b.type=s.type 
where b.type=2 
order by b.id desc
这样,您就更容易构造查询,如下所示:

select b.id,b.special_id,b.name,s.type 
from db_basic as b 
inner join db_specials as s 
on b.special_id=s.type 
where b.special_id=2 
order by b.id desc
+------+------+------+
|  id  | type | name |
+------+------+------+
|      |      |      |
select b.id,b.type,b.name
from db_basic as b 
inner join db_specials as s 
on b.type=s.type 
where b.type=2 
order by b.id desc
您应该依赖db_specials表的type列,而不是id列,因为它不会为每个
INSERT
操作自动递增。因此,您的查询应该如下所示:

select b.id,b.special_id,b.name,s.type 
from db_basic as b 
inner join db_specials as s 
on b.special_id=s.type 
where b.special_id=2 
order by b.id desc
+------+------+------+
|  id  | type | name |
+------+------+------+
|      |      |      |
select b.id,b.type,b.name
from db_basic as b 
inner join db_specials as s 
on b.type=s.type 
where b.type=2 
order by b.id desc

另外,我建议您将db_basic table的特殊_id列名更改为type,如下所示:

select b.id,b.special_id,b.name,s.type 
from db_basic as b 
inner join db_specials as s 
on b.special_id=s.type 
where b.special_id=2 
order by b.id desc
+------+------+------+
|  id  | type | name |
+------+------+------+
|      |      |      |
select b.id,b.type,b.name
from db_basic as b 
inner join db_specials as s 
on b.type=s.type 
where b.type=2 
order by b.id desc
这样,您就更容易构造查询,如下所示:

select b.id,b.special_id,b.name,s.type 
from db_basic as b 
inner join db_specials as s 
on b.special_id=s.type 
where b.special_id=2 
order by b.id desc
+------+------+------+
|  id  | type | name |
+------+------+------+
|      |      |      |
select b.id,b.type,b.name
from db_basic as b 
inner join db_specials as s 
on b.type=s.type 
where b.type=2 
order by b.id desc
如果用户在db_specials中删除了2,酒,2,并重新插入,则无法控制用户在前端输入的内容。
用户可能是insert食品,2

不要将db_specialstype列与db_basic一起加入,您应该在前端进行检查,当用户单击删除按钮时,在从表db_specials中删除2,白酒,2之前提示一条消息,如果表db\u basic中有任何特殊的\u id=2,则相应的行也将被删除。

如果用户在db\u specials中删除了2,酒,2并重新插入,则无法控制用户在前端输入的内容。
用户可能是insert食品,2


不要将db_specialstype列与db_basic一起加入,您应该在前端进行检查,当用户单击删除按钮时,在从表db_specials中删除2,白酒,2之前提示一条消息,如果表db\u basic中有任何特殊的\u id=2,则相应的行也将被删除。

尝试学习引用完整性如果表
db\u special
中的一行被删除并随后重新插入,
special
字段是否包含相同的字符串?@VikasUmrao:您能轻松地将任何引用链接发送到学习。@1000111:id
id
字段是自动递增的。我询问新行是否包含与前一行相同的
字符串。另外,如果
db_special
表中的某一行被删除,请告知
db_basic
表中的效果如何?
db_basic
表中相应的行也被删除?尝试学习参考完整性如果
db_special
表中的一行被删除,然后重新插入,
special
字段是否包含相同的字符串?@VikasUmrao:您可以发送任何参考链接来轻松学习。@1000111:id
字段被删除自动递增。我询问新行是否包含与上一行相同的
字符串。另外,如果
db_special
表中的某一行被删除,请告知
db_basic
表中的效果如何?
db_basic
表中相应的行也被删除了?@Rajdeep:我也在考虑类型。您的意思是,如果用户需要删除并再次插入,则每次都必须将类型插入为
2
。@subhra是的,这是正确的,因为id列是自动递增的,但类型列不是。再次插入行时,可以手动插入
2
作为类型值。我进一步更新了我的答案。@Rajdeep:我也在考虑类型。您的意思是,如果用户需要删除并再次插入,则每次都必须将类型插入为
2
。@subhra是的,这是正确的,因为id列是自动递增的,但类型列不是。再次插入行时,可以手动插入
2
作为类型值。我已经进一步更新了我的答案。