我继承了这个非常庞大且架构不佳的解决方案,需要编写/运行一些大型的笨拙查询。
虽然下面的查询有效并且给了我想要的结果,但是每个选择帮助的志愿者的列表都没有被标记为测试并且具有标记为“活动”的关联用户帐户。然后使用一组额外的列,一个用于5个社交媒体平台中的每一个(但它可以很容易地成为技能列表或任何内容)
SELECT v.volunteerid
, v.firstname
, v.lastname
, v.mobile
, v.phone
, v.email
, v.has_smartphone
, MAX(case vs.socialid when '1' then 'Yes' else 'No' end) Facebook
, MAX(case vs.socialid when '2' then 'Yes' else 'No' end) Twitter
, MAX(case vs.socialid when '3' then 'Yes' else 'No' end) Instagram
, MAX(case vs.socialid when '4' then 'Yes' else 'No' end) Vine
, MAX(case vs.socialid when '5' then 'Yes' else 'No' end) Google+
FROM wp_cfg_volunteer v
LEFT OUTER JOIN appusers u
ON u.volunteerid = v.volunteerid
LEFT OUTER JOIN wp_cfg_volunteer_social vs
ON vs.volunteerid = v.volunteerid
WHERE v.is_test=0
AND v.will_help=1
AND u.activationstate='Active'
GROUP BY v.volunteerid
我的问题是:如何基于社交平台查询查询,以便不是硬编码socialid
值及其相关名称,而是可以编写一个循环通过{{{ 1}}表,拉出id和名称值?
对于奖励积分:有什么好的资源来掌握in&超出了mysql查询。
谢谢,
NBSP
答案 0 :(得分:0)
你应该有一个单独的表,就像你提到wp_cfg_social
时至少有两个字段,即socialid
和socialname
。并确保socialid
的值为 1到5 。鉴于此,您可以使用INNER JOIN
显示socialname
值,而无需像以下硬编码:
SELECT v.volunteerid
, v.firstname
, v.lastname
, v.mobile
, v.phone
, v.email
, v.has_smartphone
, s.socialname
FROM wp_cfg_volunteer v
LEFT OUTER JOIN appusers u
ON u.volunteerid = v.volunteerid
LEFT OUTER JOIN wp_cfg_volunteer_social vs
ON vs.volunteerid = v.volunteerid
INNER JOIN wp_cfg_social s
ON v.socialid = s.socialid
WHERE v.is_test=0
AND v.will_help=1
AND u.activationstate='Active'
GROUP BY v.volunteerid
关于你关于mysql查询的第二个问题,你可以转到下面的链接:
Tutorial Point
Dev mySQL作为您的一般参考
Normalization学习规范化作为数据库设计的基础也很好