我有点怀疑。实际上,我需要通过使用PHP和MySQL连接两个表来获取每列值的数据。
db_specials:
id special type
1 Food and Beverage 1
2 Liquor 2
db_basic:
id special_id name
1 2 aaa
2 1 Raj
3 2 Ram
4 2 Jay
5 1 Nikesh
这里我需要从表db_basic
中获取与第一个表的Liquor相关的所有数据。我在下面解释我的代码。
$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列,因为它不会为每个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
此外,我建议您应该将db_basic表的special_id列名更改为类型,如下所示:
+------+------+------+
| 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,Liquor,2并重新插入,则无法控制用户在前端输入的内容。
用户可以是insert Food,2
不将db_specials的type列与db_basic连接,而是在前端添加一个检查,当用户点击删除按钮时,在删除表db_specials前提示消息2,Liquor,2,如果表db_basic中有任何special_id=2,相应的行也将被删除。