2011-02-16 15 views
5

मुझे जिस वेबसाइट पर काम कर रहा है, उसके लिए मुझे एक उन्नत खोज स्क्रिप्ट बनाने के लिए कुछ मार्गदर्शन चाहिए।PHP/MYSQL उन्नत खोज स्क्रिप्ट। कैसे?

मुझे पहले से ही पता है कि सरल प्रश्नों के लिए डेटाबेस कैसे खोजा जाए। मैं जिस समस्या का सामना कर रहा हूं वह अब कई चुनिंदा बक्से का उपयोग करते समय खोजना है। उदाहरण के लिए:

enter image description here

यह विभिन्न खोज विकल्पों के साथ सिर्फ एक सरल रूप है। सवाल यह है:

विज़िटर देश या शहर, दोनों या तीनों विकल्पों के साथ भी खोजना चुन सकता है।

मैं इसे PHP स्क्रिप्ट में कैसे पकड़ूं? क्या मुझे यह जांचना है कि उदाहरण के लिए एक शहर चुना गया है, और उस पर आधारित एक क्वेरी आग लगाना है? लेकिन अगर मैं ऐसा करता हूं तो मुझे प्रत्येक चयन विकल्प के आधार पर अलग-अलग प्रश्न पूछना होगा।

छद्म कोड में यह कुछ इस तरह होगा: (मुझे लगता है)

अगर देश और शहर और कुछ और अशक्त नहीं है, डेटाबेस में सभी तीन तालिकाओं में खोज करने के लिए एक प्रश्न का शुभारंभ।

लेकिन देश को चुना गया है, तो क्या करना है? या सिर्फ शहर?

क्या इसे पूरा करने का कोई आसान तरीका है?

अग्रिम धन्यवाद।

$qry = "SELECT * FROM table WHERE "; 
if ($country != '') { 
    $qry .= "country='".mysql_real_escape_string($country)."' AND " 
} 
if ($city != '') { 
    $qry .= "city='".mysql_real_escape_string($city)."' AND " 
} 
$qry .= '1'; 
$res = mysql_query($qry); 

क्वेरी क्या सेट किया गया है के आधार पर बनाया गया है:

+1

लगता है जैसे आप पहले से ही अपने प्रश्न का उत्तर दे चुके हैं। – diagonalbatman

+1

खैर, इसे पूरा करने का सरल तरीका कुछ [ल्यूकेन] (http://framework.zend.com/manual/en/zend.search.lucene.overview.html) या [स्फिंक्स] (http: //sphinxsearch.com/), लेकिन यह "सरल" काम की आपकी परिभाषा पर निर्भर हो सकता है :) –

+1

अपने "छद्म कोड" में आप उल्लेख करते हैं कि शहर और देश अलग-अलग तालिकाओं में हैं। क्या यह सच है?या वे एक ही टेबल के भीतर कॉलम अलग हैं? यदि वे वास्तव में एक अलग तालिका में हैं तो आपको टेबल में शामिल होने की आवश्यकता होगी ताकि आप एक एकीकृत परिणाम सेट प्राप्त कर सकें। – sholsinger

उत्तर

6

मुझे शर्तों में शामिल होने के लिए एक सरणी का उपयोग करना पसंद है, इसलिए मुझे अग्रणी या पीछे और पीछे के बारे में चिंता करने की ज़रूरत नहीं है।

$conditions = array(); 
if ($formCondition1) { 
    $conditions[] = 'state = "'.$somevalue.'"'; 
} 
if ($formCondition2) { 
    $conditions[] = 'country = "'.$somevalue.'"'; 
} 
... 
if ($formConditionN) { 
    $conditions[] = 'N = "'.$somevalue.'"'; 
} 

// अंत में एक साथ की स्थिति में शामिल होने, सबसे सामान्य स्थिति (यदि आप है, जो यह लगता है कि आप नहीं करते हैं, तो इस कोड में थोड़ा और अधिक जटिल हो जाएगा अन्य रैंकों जोड़ने की जरूरत है) ands साथ है

$sqlStatement = 'SELECT field1, field2 FROM tableABC WHERE '.implode(' AND ', $conditions); 

संपादित करें: इंजेक्शन हमलों को रोकने के लिए इनपुट से बचने के लिए मत भूलना, और निश्चित रूप से परीक्षण सुनिश्चित करने के लिए कम से कम 1 शर्त होने के लिए परीक्षण करें। संपादित करें: lol jswolf और मुझे बहुत समान लगता है :)

+0

विस्तृत उत्तर के लिए बहुत बहुत धन्यवाद। मुझे लगता है कि मैं इस जवाब के साथ जाऊंगा, भले ही दोनों अन्य भी काम कर रहे हों। आपकी मदद के लिए आप सभी को धन्यवाद! – moonwalker

4

मैं की तरह कुछ की कोशिश करेंगे। क्वेरी स्ट्रिंग के अंत में "1" पर ध्यान दें जो हमेशा सत्य होता है। "WHERE" का पालन करने के लिए इसकी आवश्यकता है यदि $ देश और $ शहर दोनों खाली हैं, या अंतिम "और" यदि वे नहीं हैं तो उनका पालन करने के लिए आवश्यक है।

+0

आपके उत्तर के लिए बहुत बहुत धन्यवाद। मेरे पास अब 3 अलग-अलग उत्तर हैं, वे सभी काम करते हैं और मुझे नहीं पता कि किस का उपयोग करना है। एक बार फिर धन्यवाद। – moonwalker

+0

मुझे लगता है कि यह उन्नत खोज अवधारणा के लिए एकदम सही उत्तर में से एक है। इसे साझा करने के लिए धन्यवाद:) ... –

5

मैं $where सरणी बना देता हूं, इसके लिए मेरी शर्तों को आवश्यकतानुसार जोड़ता हूं, और फिर implode इसे गोंद के रूप में 'AND' के साथ जोड़ता है। तो कुछ ऐसा:

$where = array(); 
if $city is defined 
    $where[] = "city = '".mysql_real_escape_string($city)."'"; 
fi 
if $country is defined 
    $where[] = "country = '".mysql_real_escape_string($country)."'"; 
fi 
... 

if(count($where)) { 
    $query.= ' WHERE '.implode(' AND ', $where); 
} 
+0

सुरुचिपूर्ण, मुझे यह पसंद है। – sholsinger

+0

यह बहुत ही सरल और सुरुचिपूर्ण लग रहा है। धन्यवाद! – moonwalker

+0

यही वह है जिसे मैं ढूंढ रहा था! –

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