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

时间:2016-10-31 06:04:14

标签: php mysql

我有些怀疑。实际上我需要通过使用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.因此查询也需要相应地更改。在这里,我需要知道什么是最好的逻辑,以便每次用户不会更改查询,如果任何特殊项被删除并再次插入。请帮帮我。

2 个答案:

答案 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 对应行也将被删除。