Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

एकल विशेषता में एकाधिक मान डालें

आपके सेटअप से, उस user_id . पर विचार करते हुए एक ऑटो इंक्रीमेंट PK है:

$user_name = mysql_real_escape_string($_POST['user_name']);
$user_lang = mysql_real_escape_string(implode(',', $_POST['user_lang']);
$sql = "INSERT INTO tbl_users (`user_name`, `user_lang`) VALUES ('{$user_name}', '{$user_lang}');

हाउवर, जैसा कि अन्य ने उल्लेख किया है, आपको शायद 3 स्तरीय तालिका की तलाश करनी चाहिए:

tbl_users_lang
user_id    lang_id

और जैसे डालें (उदाहरण के लिए, कोई त्रुटि प्रबंधन नहीं, केवल एक सुझाव)

$user_name = mysql_real_escape_string($_POST['user_name']);
$sql = "INSERT INTO tbl_users (`user_name`) VALUES ('{$user_name}');"
mysql_query($sql);

$user_id = mysql_insert_id();
foreach ($user_lang as $lang) {
   $lang = mysql_real_escape_string($lang);
   $sql = "INSERT INTO tbl_users_lang (`user_id`, `lang_id`) VALUES ({$user_id}, '{$lang}');"
   mysql_query($sql);       
}

** संपादित करें **

बोनस के रूप में, इस क्वेरी के साथ, आप किसी दिए गए उपयोगकर्ता की भाषा सूची के लिए अल्पविराम से अलग की गई पंक्ति प्राप्त कर सकते हैं। सोचा कि आपकी रुचि हो सकती है :

SELECT DISTINCT u.user_id, u.user_name, GROUP_CONCAT(l.lang_name) 
  FROM `tbl_users` as u
  LEFT JOIN `tbl_users_lang` as ul ON u.user_id = ul.user_id 
  LEFT JOIN `tbl_language` as l on ul.lang_id = l.lang_id
  -- add WHERE clause here to filter (ex : WHERE u.user_name LIKE 'John%')


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. वापसी तालिका में रिकॉर्ड मौजूद नहीं है

  2. किसी स्तंभ को केवल 2 मान स्वीकार करने के लिए प्रतिबंधित करना

  3. डायनामिक पिवट टेबल पर न्यूनतम और अधिकतम मान कैसे दिखाएं

  4. मौजूदा तालिका में ऑटो-इन्क्रीमेंट आईडी जोड़ें?

  5. MySQL का अनुवाद SQL सर्वर सिंटैक्स में शामिल करें?