2016-05-13 7 views
6

के भीतर प्रारंभिक स्ट्रिंग ढूंढें मेरे पास एक mysql तालिका में आइटम (ब्रांड + उत्पाद मॉडल) की एक सूची है, और मेरे पास दूसरी तालिका में ब्रांड्स की एक सूची है।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

आप की तरह

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 SET brand_id = (SELECT id FROM table_brands WHERE `Name` = SUBSTRING_INDEX(table_items.name,' ',1)) 
1

यहाँ बिना मिलती में गोता लगाने का सबसे सरल प्रश्न है।

सरल प्रश्न है कि काम करने के लिए है:

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

सबसे आसान तरीका यह करने के लिए इसे सीधे एसक्यूएल उपयोग करने के लिए है:

UPDATE table_items 
     JOIN table_brands 
     ON table_items.name LIKE CONCAT('%', table_brands.name ,'%') 
SET table_items.brand_id = table_brands.id; 
संबंधित मुद्दे