userLogTable
からすべてのアイテムを選択します。最新の一致するアイテムはactivityTable
です。私は単一のクエリでこれをやりたいDBからのアイテムを別のテーブルの最新の日付と比較する
現在、あるテーブルから選択し、別のテーブルと照合しながら結果をループします。
SELECT COUNT(*) AS Visits, userLogTable.* FROM userLogTable GROUP BY Name, Date
userLogTable
Name | Surname | Date
-----------------------------
Dave | Smith | 2016-06-01
Jane | Doe | 2016-06-01
Dave | Smith | 2016-06-02
Dave | Smith | 2016-06-01
Jane | Doe | 2016-06-03
Peter | Bloggs | 2016-06-03
Steve | Foo | 2016-06-01
Steve | Foo | 2016-06-01
// many more rows
// above SQL returns the following result as expected/needed
Name | Surname | Date | Visits
----------------------------------------
Dave | Smith | 2016-06-01 | 2
Jane | Doe | 2016-06-01 | 1
Dave | Smith | 2016-06-02 | 1
Jane | Doe | 2016-06-03 | 1
Peter | Bloggs | 2016-06-03 | 1
Steve | Foo | 2016-06-01 | 2
activityTable
Name | Surname | Date
------------------------------
Dave | Smith | 2016-06-03
Dave | Smith | 2016-06-03
Dave | Smith | 2016-06-03
Dave | Smith | 2016-06-02
Dave | Smith | 2016-06-02
Dave | Smith | 2016-06-02
Dave | Smith | 2016-06-01
Dave | Smith | 2016-05-29
Dave | Smith | 2016-05-29
// many more rows
QUERY:
foreach($userLogTableResult as $key => $val) {
// db function
SELECT Date
FROM activityTable
WHERE Date > $latestDateFromUserLogTable
AND NAME = $val['Name']
AND Surname = $val['Surname']
ORDER BY Date DESC LIMIT 1
// if there is a result then unset this item as it's older than the latest activity
}
任意の助けいただければ幸いです。
このコードは、この例では大幅に簡略化されています。私はSQLを構築し、カスタムPDO関数に解析しています。それに応じてすべての値がエスケープされ、サニタイズされます。
新しいまたは同じ日付? 'Dave |スミス| 2016年06月1日 '新しいだけ1であり、あなたの結果は2と表示されます....そして、どのような'一致するアイテム ''私はどんな 'IDを参照していません –
' userLogTable'は 'activityTable'より新しいレコードである必要があります。私のSQLの例は日付で制限されていない、それはすべてを引き出している。私のPHPループは、その後、必要な場所を削除します。私はPHPループの出力を投稿していません。 –
http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple-sql-クエリ – Strawberry