जैसा कि प्रश्न में पहले ही कहा जा चुका है
$query = 'SELECT * FROM MYTABLE WHERE SEARCHFIELD LIKE "' . $searchText . '%"'
. 'OR SEARCHFIELD LIKE "% ' . $searchText . '%"'
रिकॉर्ड मिलान के लिए काम करता है जहां SEARCHFIELD
इसमें एक शब्द होता है जो $searchText
. से शुरू होता है (या इसके बराबर होता है)
प्रदर्शन के संबंध में मैंने अपनी विकास मशीन MBP 2,2 GHz i7 quad core
पर एक परीक्षण किया है :
4.000 रिकॉर्ड पर किसी शब्द को खोजने में लगभग 40 मिलीसेकंड का समय लगता है।
रिकॉर्ड सामान्य रूप से अनुक्रमित होते हैं (कोई पूर्ण पाठ नहीं)।
मेरे पास कुछ हज़ार रिकॉर्ड हैं और क्वेरी बहुत बार नहीं चलती है इसलिए मेरे लिए अच्छा है।
समाधान अन्य संदर्भों के लिए उपयुक्त नहीं हो सकता है।
उपरोक्त क्वेरी के साथ एक तैयार स्टेटमेंट बनाने के लिए मैंने यहां वर्णित तकनीक का इस्तेमाल किया:
परिणामी कोड इस प्रकार है:
function like($s, $e)
{
return str_replace(array($e, '_', '%'), array($e . $e, $e . '_', $e . '%'), $s);
}
/* ... */
/* create a prepared statement */
$stmt = $mysqli->prepare(
'SELECT * FROM MYTABLE WHERE SEARCHFIELD LIKE ? ESCAPE "=" OR SEARCHFIELD LIKE ? ESCAPE "="'
);
if( $stmt )
{
/* escape the text */
$escSearchText = like( $searchText, "=" );
/* 'like' parameters */
$like1 = $escSearchText . "%";
$like2 = "%" . $escSearchText . "%";
/* bind parameters for markers */
$stmt->bind_param( "ss", $like1, $like2 );
/* ... */