2016-05-13 15 views
6

Tôi có danh sách các mục (Nhãn hiệu + productModel) trong bảng mysql và tôi có danh sách Nhãn hiệu trong bảng khác.mysql/php: tìm chuỗi bắt đầu trong chuỗi

dụ:

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 | 

Tôi thừa hưởng table_items từ một dự án trước đó vì vậy tôi cần phải phát hiện tên thương hiệu trong table_items, nếu thương hiệu hiện diện, sau đó thêm thương hiệu id cho brand_id cột mục (chưa có hàng)

nên sản lượng lý tưởng sẽ là

|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 

vì vậy tôi không biết nếu tôi nên sử dụng PHP hoặc có thể được thực hiện trong MySQL trực tiếp .. và nếu PHP làm thế nào để tôi phát hiện các chuỗi phù hợp?

+1

Vâng, Nó có thể được thực hiện trực tiếp trong mysql. – DD77

Trả lời

1

bạn có thể sử dụng truy vấn trong mysql như

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

Tôi tìm thấy những gì bạn muốn làm cũng tương tự như tìm kiếm và đó là tốt nhất với MySQL.

Truy vấn sau để nhận tất cả mục tương tự với ký tự đại diện của bạn.

SELECT * FROM brand_table WHERE name LIKE "Apple%" 

Tất cả các tên bắt đầu bằng quả táo sẽ xuất hiện. Tôi hy vọng bạn bắt được sự trôi dạt ở đây

1

Tốt hơn bạn nên xử lý trong Cơ sở dữ liệu nếu bạn có thể tìm ra đúng truy vấn.

Bạn có thể thử các truy vấn sau đây:

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

Bạn có thể tham gia cả hai bảng sử dụng như và cập nhật khi cần thiết.

UPDATE `table_items` TI 
INNER JOIN table_brands TB 
    ON TI.name LIKE CONCAT(TB.name, '%') 
SET TI.brand_id = TB.id 

Lưu ý: INNER JOIN sẽ chỉ cập nhật các trường được khớp.

1

Truy vấn này sẽ thực hiện công việc.

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

Dưới đây là các truy vấn đơn giản nhất mà không nhảy vào tham gia:

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

Cách đơn giản nhất để làm điều đó nó sử dụng SQL trực tiếp.

Truy vấn đơn giản nhất mà thực hiện công việc là:

UPDATE table_items 
    SET brand_id = (SELECT id FROM table_brands 
        WHERE table_items.name LIKE CONCAT(name,'%')) 
Các vấn đề liên quan