0
私は複雑なクエリを作成するのに少し助けが必要ですが、私は以下で達成しようとしていることを説明しようとします。私が持っている:ここでは単一のクエリへの複雑なループのループ
は私のデータ
table_one
+---------+---------+----------+----------+
| user_id | poly_id | in | out |
+---------+---------+----------+----------+
| 900 | 1 | 20-12-17 | 20-12-17 |
| 900 | 2 | 21-12-17 | 22-12-17 |
| 900 | 3 | 22-12-17 | 24-12-17 |
| 900 | 1 | 23-12-17 | 26-12-17 |
| 444 | 4 | 24-12-17 | 28-12-17 |
| 444 | 4 | 25-12-17 | 30-12-17 |
| 444 | 5 | 26-12-17 | 01-01-18 |
| 444 | 3 | 27-12-17 | 03-01-18 |
| 900 | 2 | 28-12-17 | 05-01-18 |
| 900 | 1 | 29-12-17 | 07-01-18 |
| 444 | 2 | 30-12-17 | 09-01-18 |
+---------+---------+----------+----------+
table_two
である私は、アイデアがある
//results comes from somewhere else, it looks something like this for example:
array (
"user_id" => "poly_id of the last gas station"
"900" => 1,
"444" => 10
)
foreach ($result AS $res) {
$query = "
SELECT
table_one.name AS name
FROM
`table_one`
LEFT JOIN
`table_two` ON table_one.poly_id = table_two.id
WHERE
`table_two`.type = 'gas station '
AND
table_one.user_id = $res['user_id']
AND
table_one.poly_id != $res['poly_id']
AND
table_one.in >= "some date from'
AND
table_one.out <= 'some date to'
AND
(FIND_IN_SET('general', table_two.product) > 0 OR FIND_IN_SET('cars', table_two.product) > 0)
ORDER BY out DESC LIMIT 1
";
//if the results is not empty use the result['name']
}
次のようになり、作業のソリューションを持っていますユーザーの最後のガソリンスタンド、しかし、私は日付範囲の間に前のものを見つける必要があります。
私が言ったように、上の例はうまくいきますが、私は一度に複数の結果を処理できる必要があります。結果は〜2000です。 これは、リクエストごとに2000以上のクエリを意味します。
- このループのループを何とか最適化して1つにすることは可能ですか?リクエストごとに2000個のクエリを実行しないのですか?
- 可能な場合、どのように:D
感謝。
データベース内の実際のタイムスタンプ。その超複雑な質問は質問自体にとって簡単にしようとしていたので – Izopi4a
あなたは結果に2つのuser_idを持たないので、同じ 'out'値を持つ2つのレコードを持つことはありません – Cherif
微妙に良い男、ありがとう。私はそれをテストするために少し時間が必要です。私がそれを得たら、私はあなたに知らせるでしょう。しかし、最初の見所でそれはすごく見える。ありがとう! – Izopi4a