2011-01-26 13 views
10


मेरे साथ भालू से एक कॉलम में एक से अधिक मूल्य के भंडारण, im वास्तव में बात समझा पर बुरा और मैं भी इस समस्या के लिए एक उपयुक्त शीर्षक पता न
ठीक है लोग मैं इस समस्या
मैं पहले से ही है है एक तालिका नाम mealMysql, एक और तालिका

+------+--------+-----------+---------+ 
| id | name | serving | price | 
+------+--------+-----------+---------+ 
| 1 | soup1 | 2 person | 12.50 | 
+------+--------+-----------+---------+ 
| 2 | soup2 | 2 person | 15.50 | 
+------+--------+-----------+---------+ 
| 3 | soup3 | 2 person | 23.00 | 
+------+--------+-----------+---------+ 
| 4 | drink1 | 2 person | 4.50 | 
+------+--------+-----------+---------+ 
| 5 | drink2 | 2 person | 3.50 | 
+------+--------+-----------+---------+ 
| 6 | drink3 | 2 person | 5.50 | 
+------+--------+-----------+---------+ 
| 7 | frui1 | 2 person | 3.00 | 
+------+--------+-----------+---------+ 
| 8 | fruit2 | 2 person | 3.50 | 
+------+--------+-----------+---------+ 
| 9 | fruit3 | 2 person | 4.50 | 
+------+--------+-----------+---------+ 

ठीक है अब मैं व्यवस्थापक इस meal तालिका
ताकि माध्य से एक कॉम्बो भोजन बनाने के लिए अनुमति देना चाहते हैं, एक कॉम्बो भोजन भोजन

की असीमित संख्या amout हो सकता है

वर्तमान में im पहेली कैसे स्टोर करने के लिए/भोजन मैं lke नीचे meal_id स्तंभ पर

+------+--------------+-----------+-----------+ 
| id | combo_name | serving | meal_id | 
+------+--------------+-----------+-----------+ 
| 1 | combo1  | 2 person | 1,4,7,9 | 
+------+--------------+-----------+-----------+ 
| 2 | combo2  | 2 person | 2,5,8 | 
+------+--------------+-----------+-----------+ 
| 4 | combo3  | 2 person | 3,5,6,9 | 
+------+--------------+-----------+-----------+ 

देखो, मुझे नहीं लगता है कि एक डाटा स्टोर करने के लिए एक अच्छा तरीका है कुछ संग्रहीत करना चाहते हैं donw के लिए लिंक कॉम्बो भोजन

उत्तर

19

एक कई-से-अनेक लिंक तालिका बनाएँ:

combo_id meal_id 
1   1 
1   4 
1   7 
1   9 
2   2 
2   5 
2   8 
3   3 
3   5 
3   6 
3   9 

एक दिया कॉम्बो के लिए सभी भोजन चुनने के लिए:

SELECT m.* 
FROM combo_meal cm 
JOIN meal m 
ON  m.id = cm.meal_id 
WHERE cm.combo_id = 1 
+0

यह करने का यह सही तरीका है –

+0

thanx चार उत्तर – slier

+0

डेटा पुनर्प्राप्त करते समय यह पूछताछ करने के लिए अधिक चक्र लेता है कि पूछताछ की संरचना की तुलना में प्रक्रिया करने के लिए और अधिक चक्र प्राप्त करने के लिए कोई स्ट्रिंग संसाधित कर सकता है। मैं भी इसमें उलझन में हूँ! –

4

नहीं। यह निश्चित रूप से डेटा स्टोर करने का एक अच्छा तरीका नहीं है। आप combo_header तालिका और combo_details तालिका के साथ बेहतर होंगे।

combo_header होगा कुछ की तरह:

+------+--------------+-----------+ 
| id | combo_name | serving | 
+------+--------------+-----------+ 
| 1 | combo1  | 2 person | 
+------+--------------+-----------+ 
| 2 | combo2  | 2 person | 
+------+--------------+-----------+ 
| 4 | combo3  | 2 person | 
+------+--------------+-----------+ 

और की तरह कुछ तो, combo_details हो जाएगा:

+------+-----------+ 
| id | meal_id | 
+------+-----------+ 
| 1 | 1  | 
+------+-----------+ 
| 1 | 4  | 
+------+-----------+ 
| 1 | 7  | 
+------+-----------+ 
| 1 | 9  | 
+------+-----------+ 
.../you get the idea! 

वैसे, एक एकल स्तंभ में एक से अधिक मान का उपयोग कर आप पहली बार सामान्य उल्लंघन कर रहे हैं द्वारा संबंधपरक डेटाबेस का रूप।

तरह से मैं आप तरह प्रश्नों का जवाब combo1 के भोजन को हल करने के लिए बहुत आसान के सभी नाम प्राप्त करने देगा का प्रस्ताव कर रहा हूँ।

1

इसे भोजन और कॉम्बो के बीच कई से अधिक रिश्ते कहा जाता है। एक भोजन को कई combos में सूचीबद्ध किया जा सकता है और एक combos में कई भोजन हो सकते हैं। आपको एक लिंक टेबल (combo.meal_id फ़ील्ड के बजाय) की आवश्यकता होगी जिसमें सभी संभावित भोजन-कॉम्बो जोड़े हों।

  1. भोजन (meal_id, सेवारत, नाम)
  2. कॉम्बो (combo_id, सेवारत, नाम)
  3. meal_combo (autoid, meal_id, combo_id):

    अंत में, आप तीन टेबल होगा

food_combo.autoid की सख्ती से आवश्यकता नहीं है, यह केवल एक सामान्य सिफारिश है।'कई-से-अनेक संबंध' या जानकारी के लिए 'डेटाबेस लिंक तालिका' के लिए

SELECT meal.id, meal.name FROM comboINNER JOIN meal_combo ON meal_combo.combo_id = combo.id INNER JOIN meal ON meal.id = meal_combo.meal_id WHERE combo.id = 132

गूगल:

उस में यह सब के भोजन के साथ एक कॉम्बो सूचीबद्ध करने के लिए।

+0

मुझे व्यक्तिगत रूप से असीमित पावर बुद्धि महसूस हुई जब इसे लड़के के रूप में पहली बार इस्तेमाल किया गया ... –

+0

http://explainextended.com/2009/06/21/click/ – Quassnoi

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