Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
12 / 12 / 1
Регистрация: 16.07.2012
Сообщений: 777
MySQL

Оптимизация обращения к БД MySQL

20.10.2018, 11:40. Показов 2905. Ответов 31

Студворк — интернет-сервис помощи студентам
Добрый день.

У меня есть массив, в котором хранятся id в определенном порядке, в котором статьи должны выводится на экран, например:
PHP
1
$poryadok = array (2,1,4,11);
Есть таблица, где находятся id (в таблице находятся больше статей, чем указано в $poryadok), title, image и text.

Я вывожу статьи в порядке предусмотренном в $poryadok.
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<? for($ii=0;$ii<count($poryadok); $ii++;){
 
$connection = mysql_connect ("localhost","root",""); // подключение к mysql
$db = mysql_select_db ("monkid"); //выбор базы данных monkid
mysql_query("SET NAMES 'cp1251'");
mysql_query("SET CHARACTER SET 'cp1251'");
if(!$connection || !$db) {exit(mysql_error());}
 
$interesnoe = mysql_query("SELECT * FROM interesnoe WHERE id=$poryadok[$ii]");
mysql_close();
$row = mysql_fetch_array ($interesnoe); ?>
<div><?= $row ['title']; ?> </div>
<div><?= $row ['image']; ?> </div>
<div><?= $row ['text']; ?> </div>
 
} //конец for
Получается так, что сколько элементов находится в массиве $poryadok, а в данном примере их 4, столько раз и будет обращение к MySQL.
Можно ли как-то один раз записать всю таблицу в $interesnoe, закрыть соединение с сервером MySQL, а потом вытащить уже из $interesnoe значения title, image и text, привязанные к id?

Заранее благодарен за ответ.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.10.2018, 11:40
Ответы с готовыми решениями:

Обработка ошибок обращения к MySQL
Приветствую. Я только начинаю изучать PHP и MySQL. Дали задание произвести выборку из базы данных. С обработкой ошибок. Саму выборку...

Оптимизация запросов к MySQL
Кто хорошо разбирается в оптимизации запросов, подскажите, как оптимизировать, например, следующий запрос: SELECT ...

Оптимизация кода php+mysql
Здрасте! Проблема вот в чем - хостинг пишет что потребляю много ресурсов! На Cron повесил с десяток php скриптов заходящих в базу и...

31
1308 / 1000 / 232
Регистрация: 01.10.2018
Сообщений: 3,894
21.10.2018, 12:05
Студворк — интернет-сервис помощи студентам
ft4l, плагиат
0
Невнимательный
 Аватар для ft4l
3109 / 1285 / 359
Регистрация: 08.02.2013
Сообщений: 7,552
Записей в блоге: 2
21.10.2018, 12:07
PHP
1
2
3
4
5
while ($row = mysql_fetch_assoc($interesnoe)) {
    $id = $row['id'];
    unset($row['id']);
    $rows[$id] = $row;
}
0
12 / 12 / 1
Регистрация: 16.07.2012
Сообщений: 777
21.10.2018, 12:36  [ТС]
Цитата Сообщение от ft4l Посмотреть сообщение
$rows[$id] = $row;
Где в данном случае указатель на title из строки 1?
0
1308 / 1000 / 232
Регистрация: 01.10.2018
Сообщений: 3,894
21.10.2018, 12:56
Цитата Сообщение от alanat Посмотреть сообщение
Где в данном случае указатель на title из строки 1?
Перечитайте тему. Это примеры "подготовительных" циклов.

Добавлено через 1 минуту
И в PHP для обращения к элементу двумерного массива принято использовать две отдельные скобки.

Добавлено через 1 минуту
Вам и так уже написали больше, чем нужно, а вы все носом воротите
1
209 / 191 / 49
Регистрация: 15.03.2016
Сообщений: 1,230
22.10.2018, 16:27
Лучший ответ Сообщение было отмечено alanat как решение

Решение

я не понял, зачем ему 2 раза советовали fetch_array()
а ещё не понял, зачем ему упорно советуют пользоваться mysql_fetch_array(), а не $mysqli
короче:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
$db = new mysqli('localhost', 'root', 'pass', 'monkid');
 
// проверка подключения
if ($db->connect_error())
    {die("Ошибка подключения: {$db->connect_errno} {$db->connect_error}");}
 
$db->query("SET NAMES 'cp1251'");
$db->query("SET CHARACTER SET 'cp1251'");
 
$res = $db->query("SELECT id, title, image, text FROM interesnoe WHERE id IN (2,5,8,10,12) ORDER BY id");
while ($row = $res->fetch_assoc())
{
?>
 
<div><?= $row ['title']; ?> </div>
<div><?= $row ['image']; ?> </div>
<div><?= $row ['text']; ?> </div>
 
<?php
}
$res->close();
$db->close(); ?> // вообще-то ПХП их сам закрывает
зы: переходите на utf8.
1
12 / 12 / 1
Регистрация: 16.07.2012
Сообщений: 777
22.10.2018, 16:53  [ТС]
Цитата Сообщение от полудух Посмотреть сообщение
переходите на utf8
Рассматривал это, но не вижу явных плюсов.
0
1308 / 1000 / 232
Регистрация: 01.10.2018
Сообщений: 3,894
22.10.2018, 17:23
полудух, автору нужен был определенный порядок, в котором должны выводиться статьи. Я не увидел этого в вашем коде. Хотя, судя по отметке об ответе, он наверное все же не смог правильно донести суть своего вопроса (у меня было такое предположение).
0
209 / 191 / 49
Регистрация: 15.03.2016
Сообщений: 1,230
22.10.2018, 17:26
обычно все виды "порядков" внутри БД организовываются
если прям надо, то:
PHP
1
while ($row = $res->fetch_assoc())    {$arr[$row['id']] = $row;}
0
1308 / 1000 / 232
Регистрация: 01.10.2018
Сообщений: 3,894
22.10.2018, 17:27
полудух, все это ему было сказано и показано.
0
209 / 191 / 49
Регистрация: 15.03.2016
Сообщений: 1,230
22.10.2018, 18:08
Цитата Сообщение от alanat Посмотреть сообщение
Рассматривал это, но не вижу явных плюсов.
ну вот попадётся вам в тексте слово на арабском/китайском/немецком и увидите
0
12 / 12 / 1
Регистрация: 16.07.2012
Сообщений: 777
22.10.2018, 23:36  [ТС]
Цитата Сообщение от полудух Посмотреть сообщение
// проверка подключения
if ($db->connect_error())
{die("Ошибка подключения: {$db->connect_errno} {$db->connect_error}");}
Сделал так:
PHP
1
2
3
4
5
6
7
8
9
<?php
 
$db = new mysqli('localhost', 'root', 'pass', 'monkid');
 
// проверка подключения
if ($db->connect_error())
    {die("Ошибка подключения: {$db->connect_errno} {$db->connect_error}");}
 
$db->close(); ?> // вообще-то ПХП их сам закрывает
Показывает ошибку:
HTML5
1
Fatal error: Call to undefined method mysqli::connect_error() in Z:\home\monkid.ru\www\mpchi3.php on line 6
0
209 / 191 / 49
Регистрация: 15.03.2016
Сообщений: 1,230
23.10.2018, 08:38
if ($db->connect_errno) {
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.10.2018, 08:38
Помогаю со студенческими работами здесь

PHP+MySQL оптимизация при подщете количества записей в каждой категории
Доброго времени суток всем! Столкнулся со следюющей проблемой: есть сайт с обявлениями, на нем много категорий, по каждой из которых надо...

Оптимизация кода PHP+MYSQL. При большом количестве посетителей: ошибка 500
Эти кодом я вывожу тумбы к видео на страницу из базы и их названия. &lt;?php $video = mysql_query ('SELECT id,title,page,img,duration FROM...

Перезапуск обращения к mysql (выбрать заного)
Всем привет. Задался вопросом. Вот к примеру есть выборка 1 ид рандомно из таблицы $query_rand = mysqli_query($link, &quot;SELECT * FROM...

Типы оптимизация: черная оптимизация, серая оптимизация и белая оптимизация
Много много лет назад, на заре становления профессии &quot;оптимизатора&quot; в какой то умной книжке был создан миф. Это миф о цветовой индефикации...

Mysql запрос оптимизация
красткая структура базы: gorod id name magazin id id_gorod name comments id


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
32
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru