2016-05-13 23 views
6

私はアイテム(Brand + productModel)のリストをmysqlテーブルに持っており、別のテーブルにBrandのリストがあります。mysql/php:文字列内の開始文字列を見つける

例:私はtable_itemsにブランド名を検出する必要があるので、

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を継承しましたブランドが存在する場合は、アイテム欄brand_id(現在空)

にブランドIDので、理想的な出力は、私はPHPを使うべきか、直接のMySQLで行うことができるかどうか私は知りません

|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と一致する文字列を検出する方法は?私はあなたが何をしたいのかを見つける

+1

はい、それは、MySQLで直接行うことができます。 – DD77

答えて

1

あなたは

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

のようにMySQLでクエリを使用することができますが、検索に似ており、それは、MySQLとベストです。

次のクエリは、ワイルドカードと同様の項目をすべて取得します。

SELECT * FROM brand_table WHERE name LIKE "Apple%" 

リンゴで始まるすべての名前が表示されます。私はあなたがここでドリフトをキャッチすることを願って

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, '%'); 
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,'%')) 
関連する問題