2009-01-24 15 views
6

मैं वर्तमान में दो तालिकाओं निम्नलिखित है:सर्च कर रहे हैं दो तालिकाओं

CREATE TABLE files_list 
(
    'listid' INT, 
    'name' VARCHAR(25), 
    'synonym' VARCHAR(25), 
    'description' VARCHAR(25) 
); 

CREATE TABLE files_tags 
(
    'tag_name' VARCHAR(25), 
    'listid' INT 
); 

कोई, कीवर्ड "ड्रैगन बॉल" का उपयोग करता है इस समय, मैं संभव मैचों के लिए my_list खोज करने के लिए क्वेरी निम्नलिखित का उपयोग करें:

SELECT * 
FROM files_list 
WHERE name LIKE '%dragon%' 
OR synonym LIKE '%dragon%' 
OR description LIKE '%dragon%' 
OR name LIKE '%ball%' 
OR synonym LIKE '%ball%' 
OR description LIKE '%ball%' 

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

मेरे प्रश्न 1. क्या वर्तमान mysql क्वेरी को कम करने का कोई तरीका है? 2. से पंक्तियां दिखाने के लिए files_tags में एक पंक्ति है, लेकिन files_list में कोई मिलान नहीं है, तो files_tags तालिका, के साथ मैं इसे कैसे जोड़ सकता हूं? - files_list से पंक्तियां दिखाने के लिए जिसमें files_list, but may not in files_tags` में एक मैच है?

आप http://hsbsitez.com/

+0

http://stackoverflow.com/questions/394041, डुप्लिकेट पंक्तियों को पैदा करेगा जब आईडी प्रति एकाधिक टैग उपलब्ध हैं सुनिश्चित करेंगे/mysql-how-to-search-multiple-table-for-a-string-current-in-any-column इस प्रश्न को देखें आपका उत्तर वहां है :) – fmsf

+0

[MySQL: संभावित स्ट्रिंग के लिए एकाधिक तालिकाओं को कैसे खोजें किसी भी कॉलम में मौजूद] (http://stackoverflow.com/questions/394041/mysql-how-to-search-multiple-tables-for-a-string-existing-in-any-column) – KindaTechy

उत्तर

0

पर वर्तमान प्रदर्शित किया परिणाम देख सकते हैं जब संघ का उपयोग कर वास्तव में कॉलम आप प्रत्येक unioned क्वेरी के लिए चाहते हैं सावधान रहें। और इस मामले में, एक सबक्वेरी अधिक समझ बनाने के लिए लगता है:

SELECT name, synonym, description FROM files_list WHERE 
     name LIKE '%dragon%' OR synonym LIKE '%dragon%' OR description LIKE '%dragon%' 
     OR name LIKE '%ball%' OR synonym LIKE '%ball%' OR description LIKE '%ball%' 
     OR listid IN (SELECT listid FROM files_tags WHERE tag_name='dragon' OR tag_name='ball'); 

कुछ अतिरिक्त प्रश्न: जब आप कहते हैं कि तुम उपयोगकर्ता "सभी टैग" दिखाने चाहते हैं, आप सभी टैग कि किसी दिए गए ListId के लिए मौजूद हैं मतलब है? या सिर्फ उन लोगों से मेल खाता है? और यदि "% ड्रैगन%" जैसे विवरण, ड्रैगन टैग्स में से एक है जिसे आप वापस लौटना चाहते हैं भले ही यह file_tags में न हो?

1

इससे तालिकाओं में शामिल होने के लिए और अधिक समझदारी होगी।

SELECT name, synonym, description, tag_name FROM `files_list` WHERE (name LIKE '%dragon%' OR synonym LIKE '%dragon%' OR description LIKE '%dragon%' OR name LIKE '%ball%' OR synonym LIKE '%ball%' OR description LIKE '%ball%') 
OUTER JOIN files_tags on files_tags.listid = files_list.listid 

OUTER JOIN सभी टैग चयन किया जाता है, इस फर्क सिर्फ इतना है टैग होने के साथ

+0

केवल तभी काम करता है जब वे हैं संबंध कुंजी – KindaTechy

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