Sql从字符串中选择数据选择ID

时间:2016-02-15 13:51:03

标签: php mysql sql database

类别表

+----+-----------------------+
| id | category_name         |
+----+-----------------------+
|  1 | Buy Book              |
|  2 | Buy other thinks      |
+----+-----------------------+

购买表

+----+-----------------------+----------+-------------+----------+--------+-------+
| id | identity              | name     | description | per_rate | bought | costs |
+----+-----------------------+----------+-------------+----------+--------+-------+
|  1 | PROJECT[1]CATEGORY[1] | BOOK     | PHP BOOK    | 10       | 50     | 5000  |
|  2 | PROJECT[1]CATEGORY[1] | BOOK     | PHP BOOK    | 10       | 40     | 4000  |
|  3 | PROJECT[2]CATEGORY[1] | BOOK     | JS BOOK     | 2        | 50     | 100   |
+----+-----------------------+----------+-------------+----------+--------+-------+

当我选择此表时,我想从其他表中选择类别名称。

identity:PROJECT [ project_id ] CATEGORY [ category_id ]

所以有办法选择类别ID并从其他表中选择类别名称

我想要这张表

+----+---------------+-----------------------+----------+-------------+----------+--------+-------+
| id | category_name | identity              | name     | description | per_rate | bought | costs |
+----+---------------+-----------------------+----------+-------------+----------+--------+-------+
|  1 |  Buy Book     | PROJECT[1]CATEGORY[1] | BOOK     | PHP BOOK    | 10       | 50     | 5000  |
|  2 |  Buy Book     | PROJECT[1]CATEGORY[1] | BOOK     | PHP BOOK    | 10       | 40     | 4000  |
|  3 |  Buy Book     | PROJECT[2]CATEGORY[1] | BOOK     | JS BOOK     | 2        | 50     | 100   |
+----+---------------+-----------------------+----------+-------------+----------+--------+-------+

1 个答案:

答案 0 :(得分:2)

你的数据结构非常糟糕。 projectcategory应该在他们自己的列中,数字正确存储为数字,以及正确的外键关系。在MySQL中,这样做可能需要触发器,但值得。

有时,我们会遇到其他人的错误决定。您可以使用like

执行所需操作
select b.*, c.category_name
from buy b join
     category c
     on b.identity like concat('%CATEGORY[', c.id, ']');

但是,您应该努力修复损坏的数据结构。