1

結合したい 2 つの個別のクエリがあります。

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] => 
)

配列を元の配列と同じに保ちたいのですが、2 つのクエリを使用する代わりに、1 つだけを使用したいと考えています。もし可能なら。

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.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

2 つのテーブルがユーザー ID でリンクされていれば十分だと思いますが、内容がわからないため、日付についてはわかりません。

于 2013-09-20T13:30:06.810 に答える
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 に答える