我有些怀疑。实际上我需要通过使用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
这里我需要从第一个表中与Liquor相关联的表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
前端还有插入删除功能。假设用户删除了id=2
表中db_specials
的行并再次插入,在这种情况下,id
将更改为2到3.因此查询也需要相应地更改。在这里,我需要知道什么是最好的逻辑,以便每次用户不会更改查询,如果任何特殊项被删除并再次插入。请帮帮我。
答案 0 :(得分:0)
而不是 id 列,您应该依赖 db_specials 表的 type 列,因为它不会是每次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 列名称更改为 type ,如下所示:
+------+------+------+
| 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
答案 1 :(得分:0)
如果用户在db_specials中删除 2,Liquor,2 并重新插入,则无法控制用户在前端输入的内容。
用户可能会插入食物,2
不要将 db_specials 的类型列加入 db_basic ,而应在用户点击删除时在前端进行检查按钮,在表db_specials中删除 2,Liquor,2 之前提示消息,如果表中有任何special_id = 2 db_basic 对应行也将被删除。