php - 使用不同语言从数据库中选择类别

标签 php mysql relational-database

我希望有人能告诉我如何继续,因为我现在正在失去理智。

我刚刚在数据库中创建了两个表。第一个看起来像这样:

categories
categories_id
cat_group (categories group)
cat_name (category name)
cat_lang (category language)

第二个:

users
users_id
username
category

您可能会问自己为什么要使用“类别组”。好吧,有时我需要从数据库中提取特定组的所有类别。让我们看一个例子:

cat_group = teacher
cat_name = teacher
cat_lang = 1 (en)

cat_group = teacher
cat_name = leraar
cat_lang = 2 (dutch)

cat_group = teacher
cat_name = professeur
cat_lang = 3 (french)

当我现在尝试从两个表中选择所有教师时,它工作得很好。但有时类别名称在不同语言中是相同的。

例如:

类别名称:学生(英文) 类别名称:学生(荷兰语) 类别名称:étudiant(法语)

当我尝试相同的查询时:

SELECT users.username, users.category, categories.cat_group 
FROM users
LEFT JOIN categories ON users.category = categories.category_name
WHERE categories.cat_group = 'student'

我最终得到以下结果:

student adam student
student chris student
étudiant brian student
student adam student
student chris student

我不知道我在这里做错了什么。我只需要这样的东西: 类别名称:学生 用户名:亚当 category_group : 学生

我的查询有什么问题吗?

提前致谢。

最佳答案

我不明白任何答案实际上是如何解决您的问题的。例如,您应该如何确定使用哪种语言?

I just need something like ... Am I doing anything wrong in my query?

我们需要回到首要原则。数据模型尚未准备好进行编码。如果是,代码将很容易。

多语言支持需要更多的工作。这个问题已经解决,但没有明确处理,而且需要这样做。这两个严重的问题得不到解决,难怪你的精神压力很大。这是假设您有足够的资格完成这项任务,否则您有第三种压力。

你需要这样的东西。

▶Normalised Data Model◀ (内联链接在某些浏览器/版本上不起作用。)

不熟悉关系建模标准的读者可能会发现 ▶IDEF1X Notation◀有用。

您的示例显示每个用户一个类别,所以我已经提供了;如果一个用户可以属于多个类别,您需要不同的模型,请告诉我。

代码

现在您的查询很容易了。我知道您的查询是一个示例,但没有上下文,并且在特定于语言的环境中,语言总是处于相当高的顺序,始终是上下文的一部分。这是一个查询),类似于您的示例,针对所有使用 他们的 语言的类别的用户:

SELECT  FirstName,
        LastName,
        Name AS Category
    FROM User              U,
         CategoryLanguage  CL
    WHERE U.CategoryId   = CL.CategoryId
    AND   U.LanguageCode = CL.LanguageCode
请注意,无需加入 Category。这是因为我已经使用了存在的 Identifiers,并根据标准将它们迁移到子表,并且没有在移动的所有内容上粘贴 Id 列(在Id 列到处都是,是的,您必须加入 Category;这已被消除)。 CategoryIdLanguageCode 就是这样,无论它们出现在哪里。没有空值,没有外连接。

这里是用的语言(假设是英语)的相同查询:

SELECT  FirstName,
        LastName,
        Name AS Category
    FROM User              U,
         CategoryLanguage  CL
    WHERE U.CategoryId   = CL.CategoryId
    AND   U.LanguageCode = "en"        -- or ${language} from the app layer
    AND   U.CategoryId   = ( SELECT CategoryId 
        FROM  CategoryLanguage 
        WHERE LanguageCode = "en"      -- or ${language} from the app layer
        AND   Name         = "Student" -- or ${category} from the app layer
        )

关于php - 使用不同语言从数据库中选择类别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4473985/

相关文章:

ruby-on-rails - quora 上的修订控制如何工作?数据库设计

PHP 文件上传缺少 tmp_name

php - Firebase - 使用 PHP 发送通知不起作用

php - 代码点火器输入

php - 存储过程准备语句错误mysql php

mysql - 使用 GROUP BY 时如何获取所有行?

html - 如何通过查询去除重复项?

mysql - 使用枚举列替代数据库设计,导致性能不佳

php - MySQL插入NULL而不是0000-00-00日期

mysql - 为什么在数据库中使用 bool 标志不好?应该用什么代替?