php - Mysql 加入 1 行与多行 - 组 concat 或 php?

标签 php mysql group-concat

考虑以下示例:

+----------+--------+-------------+----------+
| Person_id| Person | Language_id | Language |
+----------+--------+-------------+----------+
| 1        | Bob    | 5           | English  |
| 1        | Bob    | 3           | Italiano |
| 1        | Bob    | 8           | Deutsch  |
+----------+--------+-------------+----------+

查询是(不是那么重要,只是编写脚本来向您展示表结构):

SELECT pl.Person_id, Person, Language_id, Language FROM people as p
LEFT JOIN people_languages as pl ON p.Person_id = pl.Person_id 
LEFT JOIN languages as l ON pl.language_id = l.language_id
WHERE pl.Person = 1;

所以基本上,如果表是以这种方式构建的,是检索如上所示的所有结果然后创建一个 php 函数来创建一个 person Model with languages_id 和 languages 在一个数组中,还是使用 group_concat 更好? 来检索一行,然后将语言和 languages_id 分解成一个数组?

顺便说一句,无论我做什么,最后我都希望有一个如下的人物模型:

class Person { 

    public $person_id; // 1
    public $person; // Bob
    public $language_id; // Array(5, 3, 8)
    public $language; // Array(English, Italiano, Deutsch);

    .
    . // Functions 
    .

}

最佳答案

我认为你应该将查询分离到它们单独的模型中

应该有一个Language 模型并且会保持简单

class Language
{
   function getId() { return $id; }
   function getDescription { return $description; }
}


class Person { 

public $person_id; // 1
public $person; // Bob
public $languages; //this will store array of Language object

}

//来自数据访问

function getPerson($person_id)
{
    $person = new Person();
    //select only from Person table
    //fill $person properties from records
    //$person.person_id = $row['person_id']; etc

    //select from people_languages joined to language where person_id=$person_id
    $person->languages = getLanguagesByPerson($person->person_id); //returns array of languages

    return $person;
}

你现在可以拥有

$person = getPerson(123);
$person->langauges[0]->getId(); //language id
$person->langauges[0]->getDescription(); //language id

$person->langauges[1]->getId(); //language id
$person->langauges[1]->getDescription(); //language id

或者遍历语言

foreach($person->languages as $lang)
{
   //use($lang->getId());
   //use($lang->getDescription();
}

关于php - Mysql 加入 1 行与多行 - 组 concat 或 php?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12120882/

相关文章:

javascript - 如何在我的网页上一个一个地打印来自 json 的 key ?

php - 按Name等字段对Mysql查询进行排序

python - pandas 中的新列 - 通过应用列表 groupby 将系列添加到数据框

php - 如何在数据库中存储下拉列表中的值

php - Joomla 2.5 检查用户登录

javascript - 如何在php的echo语句中使用三元运算符

python - 如何在 OpenShift 上配置 webpy 和 MySQL

mysql - 使用简单列和返回结果的聚合函数进行选择

php - 使用 PHP 将文本添加到图像(gif 动画)

sqlite - 在 SQLite 中,多列的顺序是否与 group_concat 相同?