php - 请帮助,加入 3 个表 MySQL(图形解释)

标签 php mysql

晚安

我不是 MySQL 专家,我有 3 个表,但我找不到按特定顺序加入最终表的方法。

这是 3 个表,最后是最后一个表,因为我想要最终表。 谢谢

Table 1 (Joomla Users)

-------------------------------
|id(K)|username   |email      | 
|-----|-----------|-----------|
|71   |JOHN       |asd@go.com |
|-----|-----------|-----------|
|72   |ANA        |sad@me.com | 
|-----|-----------|-----------|
|73   |PETER      |pet@mine.co|
|-----|-----------|-----------|
|74   |MARK       |mark@nas.co|
|-----|-----------|-----------|
|75   |TONY       |tony@gma.eu|
|-----|-----------|-----------|




Table 2 (ExtraFields)

-------------------------
|Field_id(K)| Title     | 
|-----------|-----------|
|1          |MARRIED    |
|-----------|-----------|
|2          |CELL       |   
|-----------|-----------|
|3          |GENRE      |
|-----------|-----------|
|4          |AGE        |
|-----------|-----------|
|5          |WEBPAGE    |
|-----------|-----------|




Table 3 (ExtraFields values)

-------------------------------------
|Field_id(K)|JoomlaId(K)|Value      | 
|-----------|-----------|-----------|
|1          |71         |YES        |
|-----------|-----------|-----------|
|2          |71         |555-4565   |   
|-----------|-----------|-----------|
|3          |71         |Male       |
|-----------|-----------|-----------|
|4          |71         |34         |
|-----------|-----------|-----------|
|5          |71         |www.go.com |
|-----------|-----------|-----------|
|1          |75         |NO         |
|-----------|-----------|-----------|
|3          |72         |Female     |   
|-----------|-----------|-----------|
|5          |72         |www.me.com |
|-----------|-----------|-----------|
|4          |74         |38         |
|-----------|-----------|-----------|
|3          |74         |Male       |
|-----------|-----------|-----------|
|1          |73         |NO         |
|-----------|-----------|-----------|
|2          |73         |234-5654   |   
|-----------|-----------|-----------|
|3          |75         |MALE       |
|-----------|-----------|-----------|




Desired Resultant table ( i don't know hoe=w to do it)

----------------------------------------------------------------------------------
|id(K)|username   |email      |Married |Cell     |Genre  |Age    |WebPage        |
|-----|-----------|-----------|--------|---------|-------|-------|---------------|
|71   |JOHN       |asd@go.com |YES     |555-4565 |Male   |34     |www.go.com     |
|-----|-----------|-----------|--------|---------|-------|-------|---------------|
|72   |ANA        |sad@me.com |NO      |         |Female |       |               |
|-----|-----------|-----------|--------|---------|-------|-------|---------------|
|73   |PETER      |pet@mine.co|NO      |234-5654 |       |       |               |
|-----|-----------|-----------|--------|---------|-------|-------|---------------|
|74   |MARK       |mark@nas.co|        |         |Male   |38     |               |
|-----|-----------|-----------|--------|---------|-------|-------|---------------|
|75   |TONY       |tony@gma.eu|NO      |         |Male   |       |               |
|-----|-----------|-----------|--------------------------------------------------|

最佳答案

这里有几个选项。

你的问题的基本答案是这个查询..

SELECT u.*,
c1.value AS 'Married',
c2.value AS "Cell",
c3.value AS "Genre",
c4.value AS "Age",
c5.value AS "WebPage"
FROM users u
LEFT JOIN extrafields_values c1 ON c1.joomla_id = u.id AND c1.field_id = 1
LEFT JOIN extrafields_values c2 ON c2.joomla_id = u.id AND c2.field_id = 2
LEFT JOIN extrafields_values c3 ON c3.joomla_id = u.id AND c3.field_id = 3
LEFT JOIN extrafields_values c4 ON c4.joomla_id = u.id AND c4.field_id = 4
LEFT JOIN extrafields_values c5 ON c5.joomla_id = u.id AND c5.field_id = 5

但是他的很可怕。每次运行此查询时,您都在执行 5 次联接,如果您添加新的额外字段,则需要添加联接。

您可以使用存储过程动态地执行此操作,但是无论您如何执行,您都会要求 MySQL 执行“不自然”的操作。

我的强烈建议是,对于像这样的字段,您应该创建一个表并对其进行单一连接。

在某些情况下,拥有您设置的那种键/值对表确实有意义 - 其中有许多非常稀疏填充的 extra_fields,但对于这种数据(本质上是用户元-data) 我认为你最好创建一个表 - 可以有空字段(它们对数据库的大小几乎没有影响)并且你的生活会更简单!

关于php - 请帮助,加入 3 个表 MySQL(图形解释),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5738082/

相关文章:

php - 对值相同的 2 列求和

PHP进程加载并卡住所有CPU

javascript - 支持土耳其语输入的文本框

php - 使用特定 id 通过 AJAX 调用更新数据库

php - PHP 和 MySQL 查询错误

mysql - 替换MySQL数据库中的所有列名和表名

PHP:mail() 函数不适用于长 html 消息

php - 如何实现一个可以轻松与SendGrid集成的邮件队列

mysql - 在选择查询表名称上使用变量

sql - 自动将调用过程的结果放入 select 语句中