0

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

6
  • Could you post an excerpt of the appts table? It's hard to check the query without the structure/content. Commented Jun 24, 2013 at 15:03
  • Are you expecting no more than one appointment for one possible time? Commented Jun 24, 2013 at 15:04
  • Can you provide an SQLFiddle ? Commented Jun 24, 2013 at 15:05
  • MySQL isn't built to natively support nested resultsets. You'll need to implement your own way of iterating over appointments. Commented Jun 24, 2013 at 15:05
  • @MatthewFitzGerald-Chamberlain heres what the appts table looks like i.imgur.com/hHKVvRU.png Commented Jun 24, 2013 at 15:06

2 Answers 2

5

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.

Sign up to request clarification or add additional context in comments.

1 Comment

Doesnt do exactly what i need but definitely how i need to do it. Thank you, i hopefully can figure it out from here!
0

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>";
}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.