php - Query takes extremely too long to execute -


i'm trying fetch courses student has mysql database. snippet fetches 1 course, there 6 in total (and takes 15 seconds). i'm trying display course has been set (if any) using selected attribute in option tag. think causes query execute long.
wrong database design? how improve query?

this database's structure. created intermediary table user_courses:

users:
user_id

users_courses:
user_id
course_id_1
course_id_2
course_id_3
course_id_4
course_id_5
course_id_6
course_id_7

courses:
course_id
course_name

<?php     session_start();     $_session['user_id'] = 1;     require ('../mysqli_connect.php');      echo '<table><tr><td><select name="course_id_1">';      // checking if user has chosen 1st course (out of 6)     $query = "select c.course_id               courses c               inner join users_courses u               on c.course_id = u.course_id_1               u.user_id = {$_session['user_id']}";     $result = mysqli_query($dbc, $query);      // if yes, assign selected course database variable     if (mysqli_num_rows($result) == 1) {         $row = mysqli_fetch_array($result, mysqli_assoc);         $selected_course = $row['course_id'];     }      // fetch courses, , make 'none' first option in drop down menu     $query = "select course_id, course_name                courses                order (course_name = 'none') desc, course_name";     $result = mysqli_query($dbc, $query);      // create drop down menu     while ($row = mysqli_fetch_array($result, mysqli_assoc)) {         // select default value         if ($selected_course == $row['course_id']) {             $selected =' selected';         } else {             $selected='';         }          echo '<option value="' . $row['course_id'] . '"' . $selected . '>'               . htmlspecialchars($row['course_name']) . '</option>';     }      echo '</select></td></tr>';      mysqli_free_result($result);     mysqli_close($dbc);  ?> 

you have number of problems here.

1) explanation of table structure isn't sufficient diagnose common problems missing indexes, or you've established primary key. choices can have dramatic impacts on performance.

2) users_courses table denormalized; more common way model many-to-many relationships have table 1 foreign key each of joined tables. in case, table like:

users_courses ------------- user_id course_id 

and user 7 courses have 7 records in table. if it's important model know priorities "first choice", extend join table appropriate column.

3) php code wide open sql injection attacks because you're directly interpolating user input query. need fix , adopt practice of using bind variables


Comments

Popular posts from this blog

apache - Remove .php and add trailing slash in url using htaccess not loading css -

javascript - jQuery show full size image on click -