robz228
robz228

Reputation: 640

Displaying multiple results from nested query?

I am writing an appointment book type thing, and i have a table for just possible times, so my first query is to list all of the times, then my 2nd table is scheduled appointments, which lists inside the table the appointment if its time and date match the time and date pulled from the first query.

What i cannot figure out is if 2 entries on the 2nd query match the criteria to display both results at the same time.

Heres my setup:

$query = mysql_query("SELECT * FROM times", $db);
while ($row = mysql_fetch_array($query)){
    $time = $row[time];
    $query2 = mysql_query("SELECT * FROM appts WHERE time = '$time' AND date = '$date' ", $db);
    $apt = mysql_fetch_array($query2);
    $aptid = $apt[id];
    echo "<tr><td>";
    echo date('h:i A', strtotime($row[time]));
    echo "</td><td>$apt[name]</td></td><td>$apt[phone]</td><td>$apt[phone2]</td><td>$apt[src]</td><td>$apt[coach]</td><td>$apt[comments]</td><td>";
    if($aptid != ''){
        echo "<a href='index.php?date=$date&apptid=$aptid&action=delete'>Delete</a> &nbsp; <a href='index.php?date=$date&apptid=$aptid&action=x'>X</a> &nbsp; <a href='index.php?date=$date&apptid=$aptid&action=ns'>NS</a>";
    }
    echo "</td></tr>";
}

E.G.: 2 appointments set for 9am, its only displaying the first one. See screenshot

enter image description here

Upvotes: 0

Views: 142

Answers (2)

Amar Banerjee
Amar Banerjee

Reputation: 5012

Modify it to

$query = mysql_query("SELECT * FROM times", $db);
while ($row = mysql_fetch_array($query)){
    $time = $row[time];
    $query2 = mysql_query("SELECT * FROM appts WHERE time = '$time' AND date = '$date' ", $db);

    while($apt = mysql_fetch_array($query2))
   {
    $aptid = $apt[id];
    echo "<tr><td>";
    echo date('h:i A', strtotime($row[time]));
    echo "</td><td>$apt[name]</td></td><td>$apt[phone]</td><td>$apt[phone2]</td><td>$apt[src]</td><td>$apt[coach]</td><td>$apt[comments]</td><td>";
    if($aptid != ''){
        echo "<a href='index.php?date=$date&apptid=$aptid&action=delete'>Delete</a> &nbsp; <a href='index.php?date=$date&apptid=$aptid&action=x'>X</a> &nbsp; <a href='index.php?date=$date&apptid=$aptid&action=ns'>NS</a>";
    }
    echo "</td></tr>";
 }
}

You have to run another nested loop inside.

Upvotes: 5

immulatin
immulatin

Reputation: 2118

mysql_fetch_array will only fetch one row of data. From the php manual:

mysql_fetch_array — Fetch a result row as an associative array, a numeric array, or both

That means you need to loop to get multiple appointments, just like the first loop:

while($apt = mysql_fetch_array($query2)) {
    $aptid = $apt[id];
    echo "<tr><td>";
    echo date('h:i A', strtotime($row[time]));
    echo "</td><td>$apt[name]</td></td><td>$apt[phone]</td><td>$apt[phone2]</td><td>$apt[src]</td><td>$apt[coach]</td><td>$apt[comments]</td><td>";
    if($aptid != ''){
        echo "<a href='index.php?date=$date&apptid=$aptid&action=delete'>Delete</a> &nbsp; <a href='index.php?date=$date&apptid=$aptid&action=x'>X</a> &nbsp; <a href='index.php?date=$date&apptid=$aptid&action=ns'>NS</a>";
    }
    echo "</td></tr>";
}

Upvotes: 0

Related Questions