0

SQLに関する少しの助けを期待しています。私はMySQLにかなり慣れていません。

それが役立つ場合はCodeIgniterを使用していますが、通常はSQLで十分です。ActiveRecordは無視します。

使用されると思われるテーブルがいくつかあります。

Users
id
first_name
last_name
username

Events
id
created_by_user_id
name
start_date
start_time
end_date
end_time

Attendees
id
user_id
event_id

Friends
user_id
friend_id
approved

だから私が後を追っているときは:

次のすべての結果を取得します。

  • 承認された友達と私は参加しています
  • 今後のイベント、end_date/end_timeを通過していません
  • start_dateとstart_timeで注文する

これにusersテーブルを結合する必要があるので、ビューに次のようなものを表示できます。

<?= foreach($events as $e): ?>
    <?= $e->name; ?> created by <?=$e->first_name . ' ' . $e->last_name; ?>
    Happening: <?= $e->start_date; ?>
<?php endforeach; ?>

ありがとうございました!!

4

1 に答える 1

0

まず、イベントを再構築し、フィールドstart_date/start_timeとend_date/end_timeをTIMESTAMPタイプのstart/finishで結合することをお勧めします。

したがって、最初の質問については、次のようになります。

SELECT DISTINCT a1.event_id 
 FROM Attendees a1, Attendees a2 
 WHERE  
   a1.id = a2.id  
   AND a1.user_id = ${USER_ID} 
   AND a2.user_id IN 
         (SELECT friends_id FROM 
           Friends WHERE approved = True 
           AND user_id = ${USER_ID});

または、より簡単なものなら何でもINTERSECTを使用できます。

日付/時刻属性をマージする場合の2番目の質問の解決策:

SELECT id FROM Events WHERE end < NOW();

3番目のクエリ:

SELECT id from Events ORDER BY start;
于 2012-07-02T10:12:18.860 に答える