晚安
我不是 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/