2016-05-13 10 views
6

Ich habe eine Liste von Elementen (Brand + ProductModel) in einer MySQL-Tabelle, und ich habe eine Liste von Marken in einer anderen Tabelle.mysql/php: Anfangszeichenfolge in Zeichenfolge finden

Beispiel:

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 | 

erbte ich die table_items aus einem früheren Projekt, damit ich den Markennamen in table_items erfassen müssen, wenn Die Marke ist präsent, dann fügen Sie die Marke-ID zu dem Elemente Spalt brand_id (derzeit leer)

so der ideale Ausgang wäre

|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 

so weiß ich nicht, wenn ich PHP oder kann getan werden, in MySQL direkt verwendet werden soll .. und wenn PHP, wie finde ich die passenden Zeichenfolgen?

+1

Ja, es kann direkt in mysql erfolgen. – DD77

Antwort

1

Sie die Abfrage in mysql wie

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

verwenden finde ich, was Sie suchen möchten ähnlich zu tun ist, und es ist am besten mit MySQL.

Folgende Abfrage, um alle ähnlichen Artikel mit Ihrem Platzhalter zu erhalten.

SELECT * FROM brand_table WHERE name LIKE "Apple%" 

Alle Namen, die mit Äpfeln beginnen, werden angezeigt. Ich hoffe, Sie fangen die Drift hier

1

Es ist viel besser für Sie in der Datenbank zu behandeln, wenn Sie mit der richtigen Abfrage kommen können.

Sie können die folgende Abfrage versuchen:

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

Sie beide Tabelle wie und Update mit beitreten können je nach Bedarf.

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

Hinweis: INNER JOIN werden nur die Felder aktualisieren, die aufeinander abgestimmt sind.

1

Diese Abfrage wird die Aufgabe erledigen.

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

Hier ist die einfachste Abfrage, ohne in Joins zu tauchen:

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

Der einfachste Weg, es zu tun, es ist direkt SQL zu verwenden.

Die einfachste Abfrage, die die Arbeit erledigen ist:

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