php - 在单个属性中插入多个值

标签 php mysql arrays loops

我在一个数据库中有两个表,

  tbl_language:                           tbl_users
  lang_id    lang_name               user_id          user_name        user_lang
  1          English                                 
  2          Spanish                                 
  3          German
  4          Portuguese

I have PHP code to select languages from tbl_lang, Now I have a multiple select in a form where users can choose more than one languages. While inserting the values in database, I want to store multiple language values in one column/attribute. Where user_lang attribute would only store lang_ids of the tbl_language separated by comma(,).

Like

  tbl_users:
  user_id          user_name        user_lang
  1                 ABC              1,2
  2                 XYZ              1,4

How to accomplish this using PHP and MySQL ?

I have sample code here:

<?php

$user_name = $_POST['user_name'];
$user_lang = $_POST['user_lang']; // user_lang as array from multiple select
$qry = ""; // I need help with this query

最佳答案

根据您的设置,考虑到 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}');

但是,正如其他人所提到的,您可能应该寻找第 3rd 级表:

tbl_users_lang
user_id    lang_id

并插入like(例如,没有错误处理,只是一个建议)

$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%')

关于php - 在单个属性中插入多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11822321/

相关文章:

php - 如何解码 json 对象数组

php - Mysql复杂排序

javascript - 将数组连接到自身是否比遍历数组以创建更多索引更快?

php - 字符串转 Leet (1337) 用 PHP 说话

java - nameValuePair 数组列表的数值等效项?

php - 通过执行查询来克隆资源

mysql 仅选择最新记录作为记录

android - 如何删除 SQL 数据库上的行

arrays - Twig 路径函数 - 传递参数数组

ios - 将一系列对象从一个数组添加到另一个数组