Php 如何在此之后使用explode,因为在“我的数据库”列中,产品列中的所有值都可用,如下所示

Php 如何在此之后使用explode,因为在“我的数据库”列中,产品列中的所有值都可用,如下所示,php,mysql,arrays,explode,implode,Php,Mysql,Arrays,Explode,Implode,我正在创建一个数据库来存储用户信息和链接到用户的产品。我通过使用,内爆来存储产品。我以后如何引爆它们 HTML格式: <form name="frm" method="post"> <table align="center"> <tr> <td>Name</td> <td><input type="text" name="txt" id="txt" required ></td>&l

我正在创建一个数据库来存储用户信息和链接到用户的产品。我通过使用
内爆来存储产品。我以后如何引爆它们

HTML格式:

<form name="frm" method="post">

<table align="center">
<tr>
    <td>Name</td>
    <td><input type="text" name="txt" id="txt" required ></td><td></td>
</tr>
<tr>
    <td>Email</td>
    <td><input type="email" name="email" id="email" required ></td><td></td>
</tr>
<tr>
    <td>Password</td>
    <td><input type="password" name="pass" id="pass" required></td><td></td>
</tr>
<tr>
    <td>Product</td>
    <td>
        <input type="checkbox" name="chk[]" value="laptop">Laptop
        <input type="checkbox" name="chk[]" value="pc">Pc
        <input type="checkbox" name="chk[]" value="tablet">Tablet
    </td><td></td>
</tr>
<tr>
    <td></td>
    <td><input type="submit" name="submit" value="Save"></td><td></td>
</tr>
</table>
</form>
数据库将包含如下记录:

+----+------+-------------+------+------------------+
| id | name | email       | pass | product          |
|  1 | kodi | k@gmail.com | kodi | laptop,pc        |
|  2 | muru | m@gmail.com | kodi | laptop,pc,tablet |
+----+------+-------------+------+------------------+

我想知道如何对此进行分解,我想知道如何编写查询以查找拥有笔记本电脑、pc、平板电脑或某种组合的用户。

您可以使用SQL通配符在产品字段中进行搜索:

SELECT * FROM `dbtable` WHERE `product` LIKE '%tablet%' OR `product` LIKE '%laptop%';
要分离结果,请执行以下操作:

$res = explode(",", $result['product']);
foreach ($res as $item) {
    echo "has $item ";
}
更好的方法是:

SELECT p.* 
FROM `people` AS `p` LEFT JOIN 
     `stuff` AS `s` ON `p`.`id` = `s`.`person_id` 
WHERE `s`.item IN ('laptop','tablet');
    您应该考虑不存储明文密码。
  • 您应该已经连接了在人员和项目之间实际具有关系的表。例如:

    人员

    +----+------+-------------+------------------------------------------------------------------+
    | id | name | email       | password_hash                                                    |
    |  1 | kodi | k@gmail.com | 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 |
    |  2 | muru | m@gmail.com | c0e81794384491161f1777c232bc6bd9ec38f616560b120fda8e90f383853542 |
    +----+------+-------------+------------------------------------------------------------------+
    
    stuff

    +----+-----------+--------+
    | id | person_id | item   |
    |  1 |         1 | laptop |
    |  2 |         1 | pc     |
    |  3 |         2 | laptop |
    |  4 |         2 | pc     |
    |  5 |         2 | tablet |
    +----+------+-------------+
    
    那么您的查询将是:

    SELECT p.* 
    FROM `people` AS `p` LEFT JOIN 
         `stuff` AS `s` ON `p`.`id` = `s`.`person_id` 
    WHERE `s`.item IN ('laptop','tablet');
    

最好使用连接表,而不是在列中存储逗号分隔的值。这将在将来为您省去很多麻烦,也可以解决这个问题……好的,什么是连接表,那么如何解决这种类型的需求。我知道我已经实现了,先生,请帮助我解决这个需求。先生,请给我一个想法堆栈团队击败我-漂亮的答案。我要为OP添加的唯一一件事是,他使用的是过时的
mysql
函数系列。非常感谢,我在这里有个问题,在插入到表之前,如何将人员id传递到stuff表person_IDb?我是否要创建另一个表stuff并插入pi和项名称?如果我错了,请更正我,我正在等待clarification@user3804431首先,所有这些问题都是志愿者有时间回答的,所以你需要耐心。第二,我不明白你想澄清什么。您只需将
stuff
表中的
人员id
人员
人员
表中的
id
匹配即可。您可以手动完成,也可以使用ORM()来完成。