MYSQL 帮助 - 2 个数据库,1 个特色图片
MYSQL Help - 2 Databases, 1 Featured Image
我目前有 2 个 MYSQL 数据库。
DatabaseOne 是包含所有汽车的完整数据库,DatabaseTwo 侧重于汽车制造商的具体细节。例如:
DatabaseOne 有汽车制造商、型号、年份、颜色和 link 到汽车图片。
DatabaseTwo 有制造商、制造商的详细信息、phone 编号、网站等,以及我可以设置的 featured_image_id突出显示 DatabaseOne 中的特定汽车,加入匹配 ID。
Table 数据数据库一:
ID | Manufacturer | Model | Year | Color | ImageLink
1 | Toyota | Camry | 2002 | Black | 88.jpg
2 | Toyota | Venza | 2010 | Black | 91.jpg
3 | Mazda | Miata | 2001 | Red | 77.jpg
4 | Mercedes | Benz | 2012 | Green | 46.jpg
5 | Mercedes | Benz | 2000 | Blue | 12.jpg
Table 数据数据库二:
ID | Manufacturer | PhNumber | Website | FeaturedImage
1 | Toyota | 555-5555 | .com | 2
2 | Mazda | 555-5555 | .com | 3
3 | Mercedes | 555-5555 | .com |
当 DatabaseTwo 中的 FeaturedImage 与 DatabaseOne 的 ID 匹配时,数据库加入。
在这种情况下,Toyota 将显示 DatabaseOne ID 2 (Venza) 的 ImageLink (.jpg),Mazda 将显示 DatabaseOne ID 3 的 Mazda 图像,并且由于未设置 Mercedes FeaturedImage,我想要它显示最新的梅赛德斯,这将是 DatabaseOne ID 5。
我想做的是显示结果,按 DatabaseTwo 中的制造商分类,如果在 DatabaseTwo 中设置了 featured_image_ID,我想显示 image_link 来自中的匹配 ID DatabaseOne,如果没有设置featured_image_id,我只想显示该制造商最近的汽车的image_link。
显示结果时,当下面语句中第二个CASE前面有"OR"时,所有recent图像的汽车显示,然而 设置了 featured_image_id 的制造商也将只显示最近关联的 image_link。
当第二个 CASE 前面有 "AND" 时,ONLY 设置 featured_image_id 的制造商将出现,none 其他没有 featured_image_id 的制造商出现。
我试图确保所有制造商都显示图像,无论是在 DatabaseTwo.featured_image_id 中明确设置,还是如果未设置,则回退到匹配制造商的最新图像 ID。
这是我当前的 MYSQL 代码:
SELECT DatabaseOne.id, DatabaseOne.manufacturer,
DatabaseOne.model,DatabaseOne.year, DatabaseOne.picture,
DatabaseOne.image_link, DatabaseTwo.featured_image_id,
DatabaseTwo.title, DatabaseTwo.id,
IF(DatabaseTwo.id != 0, DatabaseTwo.id, 'N/A') AS card_id
FROM DatabaseOne
LEFT JOIN DatabaseTwo
ON (CASE
WHEN (DatabaseTwo.featured_image_id != 0 AND DatabaseTwo.category = 'Manufacturer'
AND DatabaseTwo.Manufacturer = DatabaseOne.Manufacturer)
THEN (DatabaseTwo.featured_image_id = DatabaseOne.id)
END )
WHERE DatabaseOne.Manufacturer != ''
AND DatabaseOne.id != 0
OR ((CASE
WHEN (DatabaseTwo.featured_image_id IS NOT NULL)
THEN (DatabaseTwo.featured_image_id != 0 ) END) )
GROUP BY DatabaseOne.Manufacturer
ORDER BY DatabaseOne.Manufacturer ASC, DatabaseOne.id DESC
请尝试以下查询:
SELECT t1.ID, t1.Manufacturer, t1.Model, t1.Year, t1.Color,
t3.ImageLink
FROM DatabaseOne t1 LEFT JOIN
(
SELECT db2.Manufacturer,
COALESCE(db2.FeaturedImage, t.DefaultFeaturedImage) AS FeaturedImage
FROM DatabaseTwo db2
INNER JOIN
(
SELECT MAX(ID) AS DefaultFeaturedImage, Manufacturer
FROM DatabaseOne
GROUP BY Manufacturer
) t
ON db2.Manufacturer = t.Manufacturer
) t2
ON t1.Manufacturer = t2.Manufacturer
INNER JOIN DatabaseOne t3
ON t2.FeaturedImage = t3.ID
按照下面的 link 进行 运行 演示:
我目前有 2 个 MYSQL 数据库。
DatabaseOne 是包含所有汽车的完整数据库,DatabaseTwo 侧重于汽车制造商的具体细节。例如:
DatabaseOne 有汽车制造商、型号、年份、颜色和 link 到汽车图片。
DatabaseTwo 有制造商、制造商的详细信息、phone 编号、网站等,以及我可以设置的 featured_image_id突出显示 DatabaseOne 中的特定汽车,加入匹配 ID。
Table 数据数据库一:
ID | Manufacturer | Model | Year | Color | ImageLink
1 | Toyota | Camry | 2002 | Black | 88.jpg
2 | Toyota | Venza | 2010 | Black | 91.jpg
3 | Mazda | Miata | 2001 | Red | 77.jpg
4 | Mercedes | Benz | 2012 | Green | 46.jpg
5 | Mercedes | Benz | 2000 | Blue | 12.jpg
Table 数据数据库二:
ID | Manufacturer | PhNumber | Website | FeaturedImage
1 | Toyota | 555-5555 | .com | 2
2 | Mazda | 555-5555 | .com | 3
3 | Mercedes | 555-5555 | .com |
当 DatabaseTwo 中的 FeaturedImage 与 DatabaseOne 的 ID 匹配时,数据库加入。
在这种情况下,Toyota 将显示 DatabaseOne ID 2 (Venza) 的 ImageLink (.jpg),Mazda 将显示 DatabaseOne ID 3 的 Mazda 图像,并且由于未设置 Mercedes FeaturedImage,我想要它显示最新的梅赛德斯,这将是 DatabaseOne ID 5。
我想做的是显示结果,按 DatabaseTwo 中的制造商分类,如果在 DatabaseTwo 中设置了 featured_image_ID,我想显示 image_link 来自中的匹配 ID DatabaseOne,如果没有设置featured_image_id,我只想显示该制造商最近的汽车的image_link。
显示结果时,当下面语句中第二个CASE前面有"OR"时,所有recent图像的汽车显示,然而 设置了 featured_image_id 的制造商也将只显示最近关联的 image_link。
当第二个 CASE 前面有 "AND" 时,ONLY 设置 featured_image_id 的制造商将出现,none 其他没有 featured_image_id 的制造商出现。
我试图确保所有制造商都显示图像,无论是在 DatabaseTwo.featured_image_id 中明确设置,还是如果未设置,则回退到匹配制造商的最新图像 ID。
这是我当前的 MYSQL 代码:
SELECT DatabaseOne.id, DatabaseOne.manufacturer,
DatabaseOne.model,DatabaseOne.year, DatabaseOne.picture,
DatabaseOne.image_link, DatabaseTwo.featured_image_id,
DatabaseTwo.title, DatabaseTwo.id,
IF(DatabaseTwo.id != 0, DatabaseTwo.id, 'N/A') AS card_id
FROM DatabaseOne
LEFT JOIN DatabaseTwo
ON (CASE
WHEN (DatabaseTwo.featured_image_id != 0 AND DatabaseTwo.category = 'Manufacturer'
AND DatabaseTwo.Manufacturer = DatabaseOne.Manufacturer)
THEN (DatabaseTwo.featured_image_id = DatabaseOne.id)
END )
WHERE DatabaseOne.Manufacturer != ''
AND DatabaseOne.id != 0
OR ((CASE
WHEN (DatabaseTwo.featured_image_id IS NOT NULL)
THEN (DatabaseTwo.featured_image_id != 0 ) END) )
GROUP BY DatabaseOne.Manufacturer
ORDER BY DatabaseOne.Manufacturer ASC, DatabaseOne.id DESC
请尝试以下查询:
SELECT t1.ID, t1.Manufacturer, t1.Model, t1.Year, t1.Color,
t3.ImageLink
FROM DatabaseOne t1 LEFT JOIN
(
SELECT db2.Manufacturer,
COALESCE(db2.FeaturedImage, t.DefaultFeaturedImage) AS FeaturedImage
FROM DatabaseTwo db2
INNER JOIN
(
SELECT MAX(ID) AS DefaultFeaturedImage, Manufacturer
FROM DatabaseOne
GROUP BY Manufacturer
) t
ON db2.Manufacturer = t.Manufacturer
) t2
ON t1.Manufacturer = t2.Manufacturer
INNER JOIN DatabaseOne t3
ON t2.FeaturedImage = t3.ID
按照下面的 link 进行 运行 演示: