2012-08-13 14 views
19

मैं स्ट्रिंग के लिए mySQL में एक पूरी तालिका खोजने की कोशिश कर रहा हूं।स्ट्रिंग के लिए mySQL में एक संपूर्ण तालिका खोजें

मैं सभी फ़ील्ड और तालिका के सभी प्रविष्टियों को खोजना चाहता हूं, प्रत्येक पूर्ण प्रविष्टि को वापस भेजना जिसमें निर्दिष्ट टेक्स्ट है।

मैं यह नहीं समझ सकता कि कई क्षेत्रों को आसानी से कैसे खोजा जाए; यहां विवरण हैं:

तालिका "क्लाइंट" है। इसमें लगभग 30 फ़ील्ड और 800 प्रविष्टियां हैं, जो ब्राउज़र में एक बार में सभी को दिखाने के लिए बहुत अधिक हैं। मैं एक नाम (यानी "मैरी") के लिए खोज करना चाहते हैं, लेकिन यह shipping_name field या billing_name field, या email क्षेत्र में आदि हो सकता है,

मैं किसी भी प्रविष्टियां जिनमें के लिए सभी क्षेत्रों खोज करना चाहते हैं स्ट्रिंग "मैरी"।

SELECT * FROM `clients` IN 'Mary' 

उत्तर

18

कुछ इस तरह का प्रयास करें:: यह मैं क्या सोचता काम करना चाहिए लेकिन ऐसा नहीं करता है

Select * from clients where Concat(field1, '', field2, '', fieldn) like "%Mary%" 

आप स्ट्रिंग ऑपरेटरों और नियमित अभिव्यक्ति पर अतिरिक्त जानकारी के लिए एसक्यूएल दस्तावेज़ देख सकेंगे कर सकते हैं।

संपादित करें: शून्य क्षेत्रों के साथ कुछ मुद्दों, हो सकता है तो बस मामले में आप सिर्फ field_i के बजाय IFNULL(field_i, '') उपयोग कर सकते हैं

केस संवेदनशीलता: आप

तरह केस संवेदी मिलान या कुछ का उपयोग कर सकते
... Where lower(concat(...)) like lower("%Mary%") 

बस सभी फ़ील्ड को खोजें: मेरा मानना ​​है कि SQL-क्वेरी बनाने का कोई तरीका नहीं है जो खोज के लिए फ़ील्ड को स्पष्ट रूप से घोषित किए बिना सभी फ़ील्ड के माध्यम से खोजेगा। कारण यह है कि रिले का सिद्धांत है संबंधपरक डेटा और संबंधपरक डेटा में हेरफेर करने के लिए सख्त नियम (कुछ बीजगणित या कोडेड बीजगणित जैसे कुछ; ये एसक्यूएल क्या हैं), और सिद्धांत "बस सभी क्षेत्रों को खोजने" जैसी चीजों की अनुमति नहीं देता है। बेशक वास्तविक व्यवहार विक्रेता के ठोस अहसास पर निर्भर करता है। लेकिन सामान्य मामले में यह संभव नहीं है। यह सुनिश्चित करने के लिए, select ऑपरेटर सिंटैक्स (where अनुभाग, पूर्व निर्धारित करने के लिए जांचें)।

+2

मैं वास्तव में तालिका के प्रत्येक फ़ील्ड को टाइप करने की आवश्यकता नहीं ढूंढ रहा था। मैं सभी फ़ील्ड खोजना चाहता हूं। मुझे लगता है कि इस तरह की एक साधारण बात संभव है। इसके अलावा मुझे एहसास हुआ कि जब मैं लोअरकेस "मैरी" टाइप करता हूं तो उसे "मैरी" नहीं मिलता है। यह केस संवेदनशील नहीं हो सकता है, और सभी क्षेत्रों की खोज कैसे कर सकता है? – VoltzRoad

+0

क्या हम concat (*) कर सकते हैं? – Waqas

+2

खाली सिंगल कोट '' के लिए क्या हैं? धन्यवाद – KDawg

12

सभी क्षेत्रों है कि आपकी खोज से संबंधित हो सकता पहचानें और उसके बाद की तरह एक प्रश्न का उपयोग करें:

SELECT * FROM clients 
WHERE field1 LIKE '%Mary%' 
    OR field2 LIKE '%Mary%' 
    OR field3 LIKE '%Mary%' 
    OR field4 LIKE '%Mary%' 
    .... 
    (do that for each field you want to check) 

LIKE '%Mary%'= 'Mary' के बजाय का उपयोग करना someCaracters + 'मैरी' + someCaracters जिसमें क्षेत्रों के लिए दिखेगा।

+0

यहां समस्या यह है कि मुझे एक खोज क्वेरी के लिए 45 बार "मैरी" शब्द टाइप करना होगा। तो मैं अपनी सूची में अगले ग्राहक से निपटने के लिए बंद हूं .... आम तौर पर प्रति दिन 10-20! मैं बस कोशिश कर रहा हूं कि एक ग्राहक रिकॉर्ड खींचें। यह 15 सेकंड से अधिक नहीं ले सकता – VoltzRoad

+4

एक स्क्रिप्ट लिखें और एक @VARIABLE को परिभाषित करें जहां आप वह नाम सेट करते हैं, आप इसे एक बार लिखेंगे, फिर केवल उस चर को संशोधित करना होगा .. –

+0

यदि आप खोज शब्द को सीधे अपने एसक्यूएल में डाल रहे हैं तो तुम उसे गलत कर रहे। फ्रांसिस पी कहते हैं। – nickdnk

3

संपूर्ण तालिका खोज के लिए एक PHP आधारित समाधान! खोज स्ट्रिंग $ स्ट्रिंग है। यह सामान्य है और आप, आप आसानी से सैकड़ों या एक से अधिक लाइन चयन और Emmet साथ संयोजन के रूप में उपयोग करते हुए Text Pastry लाइनों के हजारों उत्पन्न कर सकते हैं उदात्त उपयोग कर रहे हैं क्षेत्रों

$sql="SELECT * from client_wireless"; 
$sql_query=mysql_query($sql); 
$logicStr="WHERE "; 
$count=mysql_num_fields($sql_query); 
for($i=0 ; $i < mysql_num_fields($sql_query) ; $i++){ 
if($i == ($count-1)) 
$logicStr=$logicStr."".mysql_field_name($sql_query,$i)." LIKE '%".$string."%' "; 
else 
$logicStr=$logicStr."".mysql_field_name($sql_query,$i)." LIKE '%".$string."%' OR "; 
} 
// start the search in all the fields and when a match is found, go on printing it . 
$sql="SELECT * from client_wireless ".$logicStr; 
//echo $sql; 
$query=mysql_query($sql); 
+1

यह उपरोक्त सभी उत्तरों में सबसे अच्छा जवाब है –

0

के किसी भी संख्या के साथ सभी तालिकाओं के साथ काम करेंगे।

तो मेरे मामले में मैंने दस्तावेज़ प्रकार को HTML पर सेट किया है, फिर div*249 टाइप किया है, टैब दबाएं और एम्मेट 24 9 खाली divs बनाता है। फिर एकाधिक चयन का उपयोग करके मैंने प्रत्येक में col_id_ टाइप किया और एक वृद्धिशील आईडी संख्या डालने के लिए टेक्स्ट पेस्ट्री ट्रिगर किया।फिर कई चयनों के साथ आप div मार्कअप को हटा सकते हैं और इसे MySQL वाक्यविन्यास से प्रतिस्थापित कर सकते हैं।

3

'पसंद' कीवर्ड के साथ pattern matching के अतिरिक्त। आप fulltext सुविधा का उपयोग कर खोज भी कर सकते हैं;

SELECT * FROM clients WHERE MATCH (shipping_name, billing_name, email) AGAINST ('mary') 
2

तुम सिर्फ कुछ पाठ के लिए देख रहे हैं और प्रोग्रामिंग प्रयोजनों के लिए, आप मुक्त करने के लिए install HeidiSQL (मैं v9.2.0.4947 उपयोग कर रहा हूँ) कर सकता है के लिए एक परिणाम सेट की जरूरत नहीं है।

किसी भी डेटाबेस या तालिका पर राइट क्लिक करें और "सर्वर पर टेक्स्ट खोजें" का चयन करें।

सभी मिलान प्रत्येक तालिका के लिए एक अलग टैब में दिखाए जाते हैं - बहुत अच्छा।

भयभीत रूप से उपयोगी और मुझे घंटे बचाया। लंबी पूछताछ के साथ गड़बड़ भूल जाओ !!

+0

वाह यह अच्छा है। मैं पहले से ही हेडी का उपयोग करता हूं और इस सुविधा के बारे में नहीं जानता था। – ds00424

0
विशिष्ट आवश्यकता निम्नलिखित खोज के लिए काम करेंगे के लिए

:

select * form table_name where (column_name1='%var1%' or column_name2='var2' or column_name='%var3%') and column_name='var'; 

यदि आप डेटाबेस से डेटा खोज इस पूरी तरह से काम करेंगे के लिए क्वेरी चाहते हैं।

संबंधित मुद्दे