我在mysql表中有一个项目列表(Brand + productModel),我在另一个表格中有一个品牌列表。
示例:
table_items
|id| name | brand_id |
-----------------------------------
| 1| Apple Mac 15 |
| 2| Dell Laptop NXY |
| 3| HP Tablet 15 |
| 4| Apple Laptop AA |
| 5| Dell Tablet VV |
| 6| HP Desktop XYZ |
table_brands
|id| name |
------------
| 1| Apple |
| 2| Dell |
| 3| HP |
我从之前的项目继承了table_items
,因此我需要在table_items
中检测品牌名称,如果品牌存在,则将品牌ID添加到商品列brand_id(目前为空)
所以理想的输出是
|id| name | brand_id |
-----------------------------------
| 1| Apple Mac 15 | 1
| 2| Dell Laptop NXY | 2
| 3| Dell Tablet 15 | 2
| 4| Apple Laptop AA | 1
| 5| HP Tablet VV | 3
| 6| HP Desktop XYZ | 3
所以我不知道我是否应该使用PHP或者可以直接在MySQL中完成... 如果PHP如何检测匹配的字符串?
答案 0 :(得分:7)
您可以使用like加入两个表,并根据需要进行更新。
UPDATE `table_items` TI
INNER JOIN table_brands TB
ON TI.name LIKE CONCAT(TB.name, '%')
SET TI.brand_id = TB.id
注意:INNER JOIN
只会更新匹配的字段。
答案 1 :(得分:1)
您可以在mysql中使用查询,如
SELECT id FROM TABLE_BRANDS WHERE name like "Dell%";
答案 2 :(得分:1)
我发现你想要做的事情与搜索类似,对MySQL来说它最好。
通过查询获取带有通配符的所有类似项目。
SELECT * FROM brand_table WHERE name LIKE "Apple%"
所有以苹果开头的名字都会出现。我希望你能抓住这里的漂移
答案 3 :(得分:1)
如果能够提出正确的查询,那么在数据库中处理会好得多。
您可以尝试以下查询:
SELECT ti.id, ti.name, tb.id as brand_id
FROM table_items ti LEFT JOIN table_brands tb ON ti.name LIKE CONCAT(tb.name, '%');
答案 4 :(得分:1)
此查询将完成此任务。
<?php
$jsonData = '{"GetResult":{"Materias":[{"CodMateria":"001","Materia":"Math","paralelo":"A"},
{"CodMateria":"002","Materia":"Math2","paralelo":"B"},
{"CodMateria":"003","Materia":"Math3","paralelo":"C"},
{"CodMateria":"004","Materia":"Math4","paralelo":"D"}]}}';
$materia = json_decode($jsonData, true);
echo $materia["GetResult"]["Materias"][0]["CodMateria"];
答案 5 :(得分:1)
这是最简单的查询,无需深入研究联接:
UPDATE table_items SET brand_id = (SELECT id FROM table_brands WHERE `Name` = SUBSTRING_INDEX(table_items.name,' ',1))
答案 6 :(得分:0)
最简单的方法就是直接使用SQL。
完成这项工作的最简单的查询是:
UPDATE table_items
SET brand_id = (SELECT id FROM table_brands
WHERE table_items.name LIKE CONCAT(name,'%'))