0

MySQLサブクエリが複数の結果を返した場合でも、このコードを機能させる方法を誰かが考えていますか?ユーザーに関連するイベントがない場合、またはユーザーに関連するイベントが1つある場合は正常に機能しますが、ユーザーが複数のイベントに関連している場合サブクエリは複数の結果を返し、コードは何も取得しません。一緒に作業します。

$stmt = $db->prepare("SELECT * FROM events WHERE
                  id_events = ( SELECT id_events FROM relationship_events WHERE id_user = ?)");
$stmt->bindParam(1, $idUser);
$stmt->execute();

$rawTimeStamps = $stmt->fetchAll(PDO::FETCH_ASSOC);
$cleanDateArray = array();

foreach ($rawTimeStamps as $t) {
$rawDate = $t['start'];
$rawDate = getdate($rawDate);
$cleanDate = mktime(0,0,0,$rawDate['mon'],$rawDate['mday'],$rawDate['year']);
$cleanDateArray[] = $cleanDate;
}

for($list_day = 1; $list_day <= $days_in_month; $list_day++):

$calendar.= '<td class="calendar-day">';
    $timestamp = mktime(0,0,0,$month,$list_day,$year);
    if (!empty($cleanDateArray) && in_array($timestamp, $cleanDateArray)) {

    $date = getdate($timestamp);
    $time_start = mktime(0,0,0,$date['mon'],$date['mday'],$date['year']);
    $time_end = mktime(23,59,59,$date['mon'],$date['mday'],$date['year']);
    $stmt = $db->prepare('SELECT title FROM events WHERE start BETWEEN ? AND ?');
    $stmt->bindParam(1,$time_start,PDO::PARAM_INT);
    $stmt->bindParam(2,$time_end,PDO::PARAM_INT);
    $stmt->execute();
    $events = $stmt->fetch(PDO::FETCH_ASSOC);

    $calendar.= '<div class="day-number day-number-event"><a href="#">'.$list_day.'</a></div><p>'.$events["title"].'</p>';
    } else {
    $calendar.= '<div class="day-number day-number-noevent">'.$list_day.'</div><div id="calendar-events"></div>';
    }
4

2 に答える 2

3

クエリはである必要がありますSELECT * FROM events WHERE id_events IN ( SELECT id_events FROM relationship_events WHERE id_user = ?)

于 2012-11-06T18:33:08.160 に答える
1

あなたがそれをどのように機能させたいかに応じて、2つの可能な答えがあります。

ユーザーが1つ以上のイベントを持っているかどうかに関係なく、単一のイベントのみが必要な場合はLIMIT 1、サブクエリに追加できます。

SELECT * FROM events
WHERE id_events = (
    SELECT id_events FROM relationship_events WHERE id_user = ? LIMIT 1
)

一方、すべてのイベントをユーザーに割り当てる場合は、次のIN句を使用できます。

SELECT * FROM events
WHERE id_events IN (
    SELECT id_events FROM relationship_events WHERE id_user = ?
)

ユーザーがイベントに割り当てられていない場合も、これらの両方が正常に機能するはずです。

于 2012-11-06T18:30:26.250 に答える