在sql查询中组合多个行和连接表

时间:2012-08-23 21:24:43

标签: mysql sql joomla

首先,我要感谢所有花时间帮助别人的人!这个网站很棒,我已经为我的问题找到了一些解决方案。 但现在我被卡住了,我想请求一些帮助。 我正在开发一个新项目,我希望根据sql表值显示图表。这是关于减肥和我的用户使用表格输入他们的数据。该数据存储在2个表中:

famd0_facileforms_records:

id    user_id    username
--------------------------
14    653        username1
15    648        username2

famd0_facileforms_subrecords:

id    record   element    title        name      type            value
------------------------------------------------------------------------------------
199   14       225        Datum        datum     Calendar        2012-08-22 11:32:07
200   14       226        Gewicht      gewicht   Text            92
201   14       242        BMI          bmi       Text            33.79
209   15       225        Datum        datum     Calendar        2012-08-01 11:53:05
210   15       226        Gewicht      gewicht   Text            83
212   15       242        BMI          bmi       Text            26.20 

我能够使用以下sql查询显示图表中的所有记录:

SELECT CONVERT(d1.value, DATE) AS Datum, CONVERT(d2.value, DECIMAL(5,1)) AS Gewicht  
FROM famd0_facileforms_subrecords AS d1  
INNER JOIN famd0_facileforms_subrecords AS d2 ON d1.record = d2.record  
WHERE d1.element = 225 AND d2.element = 226  
ORDER BY d1.value ASC  

但我想只在图表中记录已登录用户的记录。我可以为登录用户使用变量,例如:

SELECT `id` FROM `famd0_facileforms_records` WHERE `user_id` = %%J_USER_ID%%

这是我的问题:我不知道如何加入两个表格,只显示我图表中登录用户的条目。

任何帮助都会很棒。

非常感谢! webnicole

1 个答案:

答案 0 :(得分:1)

看起来您只需要执行以下操作。您将向表JOIN添加famd0_facileforms_records,并在WHERE子句中放置user_id上的过滤器。

SELECT x.id, 
    CONVERT(d1.value, DATE) AS Datum, 
    CONVERT(d2.value, DECIMAL(5,1)) AS Gewicht
FROM famd0_facileforms_subrecords AS d1
INNER JOIN famd0_facileforms_subrecords AS d2 
    ON d1.record = d2.record
LEFT JOIN famd0_facileforms_records x
    ON d1.record = x.id
WHERE d1.element = 225 
    AND d2.element = 226
    AND x.user_id = %%J_USER_ID%%
ORDER BY d1.value ASC

如果您收到错误但仍希望按ID过滤,则可以添加WHERE子句,但不要在SELECT中添加ID:

SELECT CONVERT(d1.value, DATE) AS Datum, 
    CONVERT(d2.value, DECIMAL(5,1)) AS Gewicht
FROM famd0_facileforms_subrecords AS d1
INNER JOIN famd0_facileforms_subrecords AS d2 
    ON d1.record = d2.record
LEFT JOIN famd0_facileforms_records x
    ON d1.record = x.id
WHERE d1.element = 225 
    AND d2.element = 226
    AND x.user_id = %%J_USER_ID%%
ORDER BY d1.value ASC