1

我有两个要合并的单独查询。

SELECT e.id, e.measurement, e.name, weight, time, reps, distance, exerciseid, DATE(date) as date
FROM `users exercises` LEFT JOIN exercises as e ON e.id = exerciseid
WHERE `userid` = '24' AND `date` < now()
ORDER BY date DESC LIMIT 100

SELECT f.id, f.name, f.calories, f.protein, f.carbohydrate, DATE(date) as date, value, meal, unit
FROM `users foods` LEFT JOIN foods as f ON f.id = foodid
WHERE `userid` = '24' AND `date` < now()
ORDER BY date desc LIMIT 100

输出:

Array
(
    [id] => 489
    [measurement] => 2
    [name] => Dumbbell Stability Ball Press
    [weight] => 20
    [time] => 
    [reps] => 20
    [distance] => 
    [exerciseid] => 489
    [date] => 2013-08-01
)

Array
(
    [id] => 7
    [name] => Cheese, camembert
    [calories] => 300
    [protein] => 19.8
    [carbohydrate] => 0.46
    [date] => 2013-09-20
    [value] => 23
    [meal] => 3
    [unit] => 2
)

是否可以在保持相同输出的同时结合这些?

编辑:对不起,我不清楚。我不想将这些查询连接在一起,不希望这样做:

Array
(
    [id] => 672
    [measurement] => 1
    [name] => Ab Wheel (standing)
    [weight] => 
    [time] => 
    [reps] => 5
    [distance] => 
    [exerciseid] => 672
    [fid] => 23
    [fname] => Cheese, gruyere
    [calories] => 413
    [protein] => 29.81
    [carbohydrate] => 0.36
    [value] => 54
    [meal] => 1
    [unit] => 
)

我想保持数组与原始数组相同,但我不想使用两个查询,而是只使用一个。如果可能的话。

4

3 回答 3

1

在这里假设一些事情,但是如果它们共享用户 ID,您可以将所有这些表连接在一起

SELECT e.id, e.measurement, e.name, weight, time, reps, distance, exerciseid, 
  ue.DATE(date) as date, f.id, f.name, f.calories, f.protein, f.carbohydrate, uf.value,
  uf.meal, uf.unit
FROM `users exercises` 
LEFT JOIN exercises as e ON e.id = exerciseid
LEFT JOIN `user foods` as uf ON uf.userid = e.userid
LEFT JOIN `foods` as f ON f.userid = e.userid
WHERE `userid` = '24' AND `date` < now()
ORDER BY date DESC LIMIT 100
于 2013-09-20T13:30:59.413 回答
0

这是我的解决方案:

(
    SELECT 'e' AS type,
            exerciseid as id,
            DATE(date) as date,
            e.name,
            weight,
            time,
            reps,
            distance,
            e.measurement,

            null as value,
            null as meal,
            null as unit,
            null as calories,
            null as protein,
            null as carbohydrate

    FROM `users exercises`
    LEFT JOIN exercises as e ON e.id = exerciseid

    WHERE `userid` = $user->id AND `date` < now()
    ORDER BY date desc
)

UNION ALL

(
    SELECT 'f' AS type,
            foodid as id,
            DATE(date) as date,
            f.name,
            null as weight,
            null as time,
            null as reps,
            null as distance,
            null as measurement,

            value,
            meal,
            unit,
            f.calories,
            f.protein,
            f.carbohydrate

    FROM `users foods`
    LEFT JOIN foods as f ON f.id = foodid

    WHERE `userid` = $user->id AND `date` < now()
    ORDER BY date desc
)
于 2013-09-20T14:48:43.027 回答
0

当然你仍然可以加入更多的表,只要确保给表提供正确的标识参数。未经测试的远射:

SELECT e.id, e.measurement, e.name, weight, time, reps, distance, exerciseid, DATE(date) as date,
f.id, f.name, f.calories, f.protein, f.carbohydrate, DATE(date) as date, value, meal, unit
FROM `users exercises`
LEFT JOIN exercises as e ON
    e.id = exerciseid
INNER JOIN `users foods` ON
    `users foods`.userid = `users exercises`.userid
LEFT JOIN foods as f ON
    f.id = foodid
WHERE `users exercises`.`userid` = '24' AND `users exercises`.`date` < now()
ORDER BY date DESC LIMIT 100

我假设这两个表通过用户 ID 链接就足够了,但由于我不知道内容,我无法确定日期。

于 2013-09-20T13:30:06.810 回答