2

これが私のテーブルの構造です: テーブル構造

クエリの結果として必要なものは次のとおりです(ユーザーが2|4|1パターンを提供してくれることを考慮して): クエリの結果

これが私が試したことです:

SELECT parcel.TrackCode, parcelType.Name, GROUP_CONCAT(track.DateTime SEPARATOR '|') AS dt
FROM track
JOIN parcel ON track.ParcelID = parcel.ID
JOIN parcelType ON parcel.ParcelTypeID = parcelType.ID
JOIN event ON track.EventID = event.ID
GROUP BY parcel.ID;

結果は次のとおりです。

結果

date where track.eventID = 3したがって、問題は、データをいくつかのフィールド( 、、、、#パターンがであると見なしてdate where track.eventID = 1date where track.eventID = 5に分割するためにGROUP_CONCAT()が必要なことです。何か案は?date where track.eventID = 73|1|5|7

4

2 に答える 2

1

2つのクエリを実行することをお勧めします。最初にこれを使用して、関連するイベントを取得します。

SELECT ParcelID, EventID, DateTime
FROM track
WHERE EventID IN(1, 2, 4)

このクエリの結果を、キーがパーセルIDで、値が別の配列であるイベントの配列へのパーセルIDのマップに格納します。その内部配列では、キーはイベントIDであり、値はイベント日付です。

array(1 => array(
        2 => '2012-05-15 15:33:00', 
        4 => '2012-05-22 11:35:41', 
        1 => '2012-05-04 18:58:30'
    ),
    2 => array(
        2 => '2012-07-01 09:05:56', 
        4 => '2012-07-14 13:32:00', 
        1 => '2012-06-27 12:44:32'
    )
);

次に、次のようなクエリを使用して区画のリストを取得します。各区画について、前のクエリの結果をメモリ内で簡単に調べて、特定の区画IDの各イベントの日付を見つけることができます。 。

SELECT parcel.ID, parcel.TrackCode, parceltype.Name
FROM parcel
JOIN parceltype ON parceltype.ID = parcel.ParcelTypeID

注:この回答は、MySQLチャットルームで行われた会話のトリミングされたバージョンです

于 2012-07-24T17:15:47.363 に答える
0

IDも必要な場合はGROUP_CONCAT、トラックからのIDを使用する必要があります。これらも、同じ順序で指定されます。

または、クエリの最後にORDER BYを設定すると、そのデータも操作されます。

于 2012-07-24T15:20:54.500 に答える