一部の分析データで 2 つのタイムスタンプの違いを取得するために、ユーザー定義変数を使用してサブクエリの結果を制限しようとしています。私が使用しているコードは次のとおりです。
SELECT @visitID := `s`.`visit_id` AS `visit_id`, # Get the visit ID and assign to a variable
@dt := `s`.`dt` AS `visit`, # Get the timestamp of the visit and assign to a variable
`tmp`.`dt` AS `next-visit` # Get the 'next visit' timestamp which should be returned by the subquery
FROM `wp_slim_stats` AS `s` # From the main table...
LEFT JOIN (SELECT `s`.`visit_id`, # Start the subquery
MIN(`s`.`dt`) as `dt` # Get the lowest timestamp returned
FROM `wp_slim_stats` AS `s` # ...from the same table
WHERE `s`.`visit_id` = @visitID # Visit ID should be the same as the row the main query is working on
AND `s`.`dt` > @dt # Timestamp should be HIGHER than the row we are working on
LIMIT 0, 1) as `tmp` ON `tmp`.`visit_id` = `s`.`visit_id` # Join on visit_id
WHERE `s`.`resource` LIKE 'foo%' # Limit all results to the page we are looking for
目的は、個々のページビューを取得し、その訪問 ID とタイムスタンプを記録することです。サブクエリは、同じ訪問 ID を持つデータベースから次のレコードを返す必要があります。次に、一方を他方から差し引いて、ページに費やされた秒数を取得できます。
私が直面している問題は、返された行ごとにサブクエリが再評価されnext-visit
、最後まで列にデータが入力されていないように見えることです。これは、返されたすべての行が最終行のサブクエリの結果と照合されることを意味します。したがって、すべてのnext-visit
列はnull
最終行から離れています。
私が探している結果は次のようになります。
_________________________________________________
| visit_id | visit | next-visit|
|--------------|---------------|----------------|
| 1 | 123456789 | 123457890 |
|--------------|---------------|----------------|
| 4 | 234567890 | 234567891 |
|--------------|---------------|----------------|
| 6 | 345678901 | 345678902 |
|--------------|---------------|----------------|
| 8 | 456789012 | 456789013 |
|______________|_______________|________________|
しかし、私は得ています
_________________________________________________
| visit_id | visit | next-visit|
|--------------|---------------|----------------|
| 1 | 123456789 | NULL |
|--------------|---------------|----------------|
| 4 | 234567890 | NULL |
|--------------|---------------|----------------|
| 6 | 345678901 | NULL |
|--------------|---------------|----------------|
| 8 | 456789012 | 456789013 |
|______________|_______________|________________|
特に変数を動的に割り当てる場合、mySQLで変数を使用するのはまだかなり新しいです。前述したように、どこかで操作の順序を台無しにしていると思います。これにより、サブクエリが最後に各行に再入力されます。
理想的には、クライアントからの制限により、純粋な mySQL でこれを実行できる必要があるため、残念ながら PHP はありません。私がやろうとしていることをすることは可能ですか?
ありがとうございました!