在PHP中,如何将id与名称在另一个表中的名称进行匹配

时间:2016-06-29 12:38:21

标签: php mysql


我有一个PHP页面,并尝试列出我的块类别与名称而不是id' s。 这是我的MariaDB输出:

select id,name  from url_category_data;
+----+----------------------+
| id | name                 |
+----+----------------------+
|  1 | adv                  |
|  2 | aggressive           |
|  3 | alcohol              |
|  4 | anonvpn              |
|  5 | automobile/bikes     |
|  6 | automobile/boats     |
|  7 | automobile/cars      |
|  8 | automobile/planes    |
|  9 | chat                 |
| 10 | costtraps            |
+----+----------------------+

我通过使用这些类别和商店作为id来提供我的阻止列表。 这是我的块类别列表:

select policyid,category_list from url_category_block where status  = 1 ;
+----------+---------------+
| policyid | category_list |
+----------+---------------+
|        1 | 8,9,10        |
+----------+---------------+

当我尝试使用echo时,我可以打印出8,9,10

<p> Result is:   
<?php
     if($result_block===true ||   $row_list = $result_block->fetch_assoc()){ 
       echo  $row_list["category_list"];}?>
</p>

它的输出就像那样:

  

结果是:8,9,10

但我想显示这些值的名称,例如;

  

结果是:
汽车/飞机
聊天
成本陷阱

要显示我的数据,我很快会显示列表。
实际上有近150个类别名称和ID。所以,我必须在PHP中自动化这个匹配过程 我看到有人回答了这个问题,但我对MySQL和PHP不是很熟悉,所以这些答案对我来说并不清楚。 如何使用PHP将这些id号转换为打印名称?

2 个答案:

答案 0 :(得分:0)

在评论中做@jeroen sais。

创建一个表格url_category_block),其中有一列policyid和一列category_id。对于您需要的每个政策和类别组合,您将有一个条目。然后您可以按以下方式查询:

SELECT url_category_data.name FROM url_category_block LEFT JOIN url_category_data ON url_category_block.category_id = url_category_data.id WHERE policyid = 1;

此查询可能无法立即生效。我没有对它进行测试,每个SQL语法都有所不同,但快速谷歌搜索(sqljoin)应该可以帮到你。

答案 1 :(得分:0)

最佳解决方案是规范化url_category_block表,并将每个policy_id - 类别ID对存储在自己的记录中。在这种情况下,对字段值的简单连接将完成您要求的技巧。

快速解决方案是使用find_in_set() function加入2个表:

select *
from url_category_block a
inner join url_category_data b on find_in_set(b.id, a.category_list)>0