mysql / php:在字符串中查找起始字符串

时间:2016-05-13 05:28:45

标签: php mysql

我在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如何检测匹配的字符串?

7 个答案:

答案 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,'%'))