@BushaevDenis

Почему код грузит mysql?

$querystring = "SELECT * FROM `sites` WHERE `hostname` LIKE '%$search%' OR `url` LIKE '%$search%'";
		
		$accounts = explode(', ', $accounts);
		
		for ($i = 0; $i <= count($accounts) - 1; $i++) {
			$account_id = (int) mysqli_query($connect, "SELECT `account_id` FROM `accounts` WHERE `login` = '".$accounts[$i]."'")->fetch_array(MYSQLI_NUM)[0];
			if ($i = 0) {
				$querystring .= "AND WHERE `account_id` = '".$account_id."' ";
			}
			else {
				$querystring .= 'OR `account_id` = '.$account_id;
			}
		}
		$querystring .= 'ORDER BY `insearch` DESC';

Код грузит процесс mysql до 80% от ядра процессора. Если запустить mysqli_query отдельно от всего кода - всё нормально.
Не понимаю что происходит.
  • Вопрос задан
  • 164 просмотра
Решения вопроса 1
@remzalp
Программер чего попало на чем попало
1. $querystring - мне страшно даже думать про итоговый запрос. Изучите конструкцию "WHERE field_name IN (val1,val2,....)"
2. WHERE `login`, ORDER BY `insearch` - индекс по этим полям создан?
запрос вида
EXPLAIN SELECT `account_id` FROM `accounts` WHERE `login` = 'any'
даст немного инфы к размышлению
3. $accounts[$i] что содержит? Может там многовато информации
4. Весь цикл на самом деле можно свести к одному запросу
SELECT `account_id` FROM `accounts` WHERE `login`IN(....)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы