2016-05-13 51 views
6

我有一個mysql表中的項目列表(品牌+ productModel),我有另一個表中的品牌列表。mysql/php:在字符串中找到起始字符串

例如:

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檢測的品牌名稱,如果品牌是存在的,然後添加品牌標識的物品欄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如何檢測匹配的字符串?

+1

是的,它可以直接在mysql中完成的。 – DD77

回答

1

你可以使用查詢在MySQL一樣

SELECT id FROM TABLE_BRANDS WHERE name like "Dell%"; 
1

我找到你想要做的是類似的搜索和它的最好使用MySQL。

以下查詢使用通配符獲取所有類似項目。

SELECT * FROM brand_table WHERE name LIKE "Apple%" 

所有以蘋果開頭的名字都會出現。我希望你趕上這裏的漂移

1

如果你能想出正確的查詢,那你在Database中處理好得多。

你可以試試下面的查詢:

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

你可以加入使用既像表,根據需要進行更新。

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

該查詢將完成這項工作。

UPDATE table_items 
     JOIN table_brands 
     ON table_items.name LIKE CONCAT('%', table_brands.name ,'%') 
SET table_items.brand_id = table_brands.id; 
1

這裏是沒有潛入加入了簡單的查詢:

UPDATE table_items SET brand_id = (SELECT id FROM table_brands WHERE `Name` = SUBSTRING_INDEX(table_items.name,' ',1)) 
0

最簡單的方式做到這一點是直接使用SQL。

來完成這項工作最簡單的查詢是:

UPDATE table_items 
    SET brand_id = (SELECT id FROM table_brands 
        WHERE table_items.name LIKE CONCAT(name,'%'))