2016-05-13 16 views
6

Mam listę przedmiotów (Brand + productModel) w tabeli mysql i mam listę marek w innej tabeli.mysql/php: znajdź ciąg rozpoczynający się w ciągu znaków

przykład:

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 | 

odziedziczyłem table_items z poprzedniego projektu, więc muszę wykryć markę w table_items, jeśli marka jest obecna, następnie dodaj id Marka do brand_id kolumnie pozycja (obecnie pusty)

więc idealne wyjście byłoby

|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 

więc nie wiem, czy powinienem użyć PHP lub mogą być wykonywane bezpośrednio w MySQL .. a jeśli PHP jak wykryć pasujące ciągi?

+1

Tak, to może być wykonane bezpośrednio w mysql. – DD77

Odpowiedz

1

można użyć kwerendy w mysql jak

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

znajdę to, co chcesz zrobić jest podobna do wyszukiwania i to najlepiej z MySQL.

Następujące zapytanie, aby uzyskać wszystkie podobne elementy ze swoim symbolem wieloznacznym.

SELECT * FROM brand_table WHERE name LIKE "Apple%" 

Pojawią się wszystkie imiona zaczynające się od jabłek. Mam nadzieję, że złapiesz dryf tutaj

1

Znacznie lepiej jest obsłużyć bazę danych, jeśli możesz wymyślić poprawne zapytanie.

Możesz spróbować następujące zapytanie:

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

Możesz dołączyć tabelę korzystając zarówno jak i aktualizacji w miarę potrzeb.

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

Uwaga: INNER JOIN zaktualizuje tylko te pola, które są dopasowane.

1

To zapytanie wykona zadanie.

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

Oto najprostszy zapytanie bez zanurzyć się łączy:

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

Najprostszy sposób to zrobić to bezpośrednio użyć SQL.

Najprostsze zapytanie, które ma wykonać zadanie:

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