2010-09-26 28 views
8

जैसा कि यह गूंगा लगता है, इस तरह कुछ करने का कोई तरीका है:सभी क्षेत्रों के माध्यम से खोज के लिए MYSQL क्वेरी?

select row_id from mytable where * like '%searched_text%'; 

* यहां से मेरा मतलब है कि तालिका में "सभी फ़ील्ड", मेरे बजाय उन्हें एक-एक करके निर्दिष्ट करें ...

+0

क्या आप एक पूर्ण पाठ अनुक्रमणिका बनाने की कोशिश कर रहे हैं? आप apache lucene और apache solr के साथ बेहतर भाग्य हो सकता है। –

उत्तर

5

एक प्रश्न के साथ यह संभव नहीं है।

हालांकि आप जब कार्य करें:

DESCRIBE table_name; 

आप फ़ील्ड नाम है जो आप से प्रश्न उत्पन्न कर सकते हैं मिलता है।

Search in all fields from every table of a MySQL database उपयोगी हो सकता है।

+0

लिंक किया गया प्रश्न बिल्कुल मेरा प्रश्न है ... धन्यवाद wikeno – siliconpi

1

हां, इसे Full Text Search कहा जाता है।

आप MySQL की अंतर्निर्मित पूर्ण पाठ खोज का उपयोग कर सकते हैं, या Apache's Lucene (मेरा व्यक्तिगत पसंदीदा) जैसे टेक्स्ट इंडेक्सिंग करने के लिए एक अलग उत्पाद का उपयोग कर सकते हैं।

+0

umm - हाय पाब्लो - मैं इसका उपयोग कैसे करूं? ऐसा लगता है कि मुझे अपने कॉलम को संशोधित करने की आवश्यकता है? – siliconpi

+0

पूर्ण पाठ आपकी सहायता नहीं करता है, आपको अभी भी उन सभी फ़ील्ड को गिनना होगा जिन्हें आप खोजते हैं। – Wikeno

+0

@matt_tm, आपको अपने कॉलम को संशोधित करने की आवश्यकता नहीं है, आपको बस उन सभी कॉलम पर एक पूर्ण टेक्स्ट इंडेक्स बनाना होगा, जिन्हें आप चाहते हैं खोज। यह एक सूचकांक बनाने की तरह है। –

4

यहां कुछ समाधानों के साथ एक समाधान है जो विशिष्ट तालिका में सभी फ़ील्ड खोजने के लिए है।

include("db_con.php"); 
//search all fields 
$searchphrase = "banan"; 
$table = "apa303"; 
$sql_search = "select * from ".$table." where "; 
$sql_search_fields = Array(); 
$sql = "SHOW COLUMNS FROM ".$table; 
$rs = mysql_query($sql); 
    while($r = mysql_fetch_array($rs)){ 
     $colum = $r[0]; 
     $sql_search_fields[] = $colum." like('%".$searchphrase."%')"; 
    } 

$sql_search .= implode(" OR ", $sql_search_fields); 
$rs2 = mysql_query($sql_search); 
$out = mysql_num_rows($rs2)."\n"; 
echo "Number of search hits in $table " . $out; 
+1

ध्यान दिया जाना चाहिए कि बहुत ही संभावित मामले में आप उपयोगकर्ता इनपुट में खोज वाक्यांश बदलते हैं (उदाहरण के लिए $ searchphrase = $ _GET ['query']) तो आपको SQL इंजेक्शन को रोकने के लिए mysql_real_escape_string का उपयोग करने की आवश्यकता है। – Aron

-2

वह एक पूर्ण समाधान है, उपर्युक्त समाधान में संशोधन है, यह मेरे लिए काम करता है, धन्यवाद।

<!DOCTYPE html> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
     <title></title> 
    </head> 
    <body> 
     <?php 
     include('config.php'); 
     $searchphrase = "adsa"; 
     $table = "tenders"; 
     $sql_search = "select * from " . $table . " where "; 
     $sql_search_fields = Array(); 
     $sql = "SHOW COLUMNS FROM " . $table; 
     $rs = mysql_query($sql); 
     while ($r = mysql_fetch_array($rs)) { 
      $colum = $r[0]; 
      $sql_search_fields[] = $colum . " like('%" . $searchphrase . "%')"; 
     } 
     $sql_search .= implode(" OR ", $sql_search_fields); 
     $rs2 = mysql_query($sql_search); 
     $out = mysql_num_rows($rs2) . "\n"; 
     echo "Number of search hits in $table " . $out."<br />"; 
     while ($results = mysql_fetch_array($rs2)){ 
      print $results[0]."<br />"; 
     } 
     ?> 
    </body> 
</html> 
0

मैं एक टेबल के सभी क्षेत्रों में खोजने के लिए ऐसा कुछ देख रहा था। हालांकि मेरी तालिका में कम डेटा है, इसलिए मैंने 'किलियन लिंडबर्ग' का जवाब चुना और पीडीओ को अपने विचार का उपयोग करके काम किया। इस फ़ंक्शन में हम पैरामीटर में 'सर्च स्ट्रिंग' और 'टेबल नेम' भेज सकते हैं और यह SQL स्ट्रिंग को वापस कर देगा जिसे हम अपनी आवश्यकता के अनुसार आगे उपयोग कर सकते हैं। बड़ी टेबल में सोचा यह प्रक्रिया को धीमा कर सकता है।

function columnsTable($Search, $Table){ 
    include("PDO_conn_detail.php"); /* your PDO mysql connection file */ 
    $srchSQLstr = "SELECT * FROM $Table WHERE "; 
    $tableFields = Array(); 

    $colSQL = $conn->prepare("SHOW COLUMNS FROM $Table"); 
    $colSQL->execute(); 
    while ($result_colSQL = $colSQL->fetch(PDO::FETCH_ASSOC)){ 
      $tableFields[] = $result_colSQL[Field]." LIKE ('%".$Search."%')"; 
     } 

    $srchSQLstr .= implode(" OR ", $tableFields); 
    return $srchSQLstr; 
} 
संबंधित मुद्दे