Past question related to this Conclusion and subsequent sorting of records
Task:
Maximally combine sql into one or two queries. I tried it differently, but I can’t figure out how to do it better.
Working code:
//Вывод группу диалога $sql_fandom = mysql_query("SELECT `id`,`f_title` FROM `fandom` WHERE `id` = '".intval($im)."' LIMIT 1"); $fandom = mysql_fetch_assoc($sql_fandom); //Проверка на существования группы if(isset($fandom['id'])){ //Вывод пользователя по сессии и определение id диалога в группе $sql_dialog_users = mysql_query("SELECT `dialog` FROM `dialog_users` WHERE `users` = '$_SESSION[id]' AND `fandom` = '$fandom[id]' LIMIT 1"); $dialog_users = mysql_fetch_assoc($sql_dialog_users); //Вывод всех пользователей в этом диалоге в массив $sql_users = mysql_query("SELECT `users` FROM `dialog_users` WHERE `fandom` = '$fandom[id]' AND `dialog` = '$dialog_users[dialog]'"); while($users = mysql_fetch_assoc($sql_users)){ $users_array[] = $users['users']; } //Вывод всех данных пользователей $sql_users_profil = mysql_query("SELECT `id`,`name`,`avatar` FROM `users` WHERE `id` IN (".implode(',',$users_array).")"); while($users_profil = mysql_fetch_assoc($sql_users_profil)){ $users_profil_array[$users_profil['id']] = $users_profil; } //Вывод сообщений по id диалога $sql_chat = mysql_query("SELECT * FROM (SELECT * FROM `chat` WHERE `dialog` = '$dialog_users[dialog]' ORDER BY `date` DESC LIMIT 50) A ORDER BY `date`"); print<<<HERE <div class="chat-vivod" id="messages"> HERE; if(mysql_num_rows($sql_chat) == 0){ $echo = '<center>Диалог отсутствует</center><br>'; } while($chat = mysql_fetch_array($sql_chat)){ $chat_users = array( 'name' => $users_profil_array[$chat['users']]['name'], 'avatar' => avatar ($users_profil_array[$chat['users']]['avatar']), 'text' => to_link ($chat['text']), 'date' => date_smart($chat['date']) ); print<<<HERE <label class='chat-box' id='chat-box-$chat[id]'> <input type='checkbox' class='checkbox chat-box-checkbox' id='chat-box-checkbox-$chat[id]' onChange='checked_chat($chat[id]);' name='chat_text' /> <div class='chat-box-avatar image-min' style='background-image: url($chat_users[avatar]);'></div> <div class='chat-box-content'> <div>$chat_users[name]<small>$chat_users[date]</small></div> <div>$chat_users[text]</div> </div> </label> </div> HERE; }
SELECTdialog `FROMdialog_usersWHEREusers= '$ _SESSION [id]' ANDfandom= '$ fandom [id]' LIMIT 1` which 1 record is selected, no sorting is set here - hence the database returns the first matching record. In the database, there is always one for the given selection conditions, or there may be several of them and you really want to get the first one? - Mike