php4.3.10-mysql4.1.10 bug

predator

web designer
php4.3.10-mysql4.1.10 bug

php4.3.10 (Client API version - 3.23.49)
mysql4.1.10

может кто уже и сталкивался.
после выполнения такого запроса:
PHP:
			SELECT 
				server_id,
				@v:=(SELECT SUM(test_counter)
					FROM a_allocation_responses 
					WHERE 
						task_id="72" AND 
						FROM_UNIXTIME(check_time,"%Y%c%e")="200535"
					GROUP BY task_id) all_rec,
				SUM(test_counter) num, ROUND((SUM(test_counter)*100)/@v) prc
			FROM a_allocation_responses
			WHERE 
				task_id="72" AND 
				FROM_UNIXTIME(check_time,"%Y%c%e")="200535"
			GROUP BY server_id
из пхп prc вернулся пустым

если такой-же запрос выполнить например в MySQL-Front'e prc заполнен

но если запрос изменить вот на такой
PHP:
			SELECT 
				server_id,
				@v:=(SELECT SUM(test_counter)
					FROM a_allocation_responses 
					WHERE 
						task_id="72" AND 
						FROM_UNIXTIME(check_time,"%Y%c%e")="200535"
					GROUP BY task_id) all_rec,
				SUM(test_counter) num, ROUND((SUM(test_counter)*100)/(SELECT SUM(test_counter)
					FROM a_allocation_responses 
					WHERE 
						task_id="72" AND 
						FROM_UNIXTIME(check_time,"%Y%c%e")="200535"
					GROUP BY task_id)) prc
			FROM a_allocation_responses
			WHERE 
				task_id="72" AND 
				FROM_UNIXTIME(check_time,"%Y%c%e")="200535"
			GROUP BY server_id
то и в php всё нормально

вот такой баг, блин :)
вот незнаю - если два одинаковых вложенных запроса, mysql оптимизирует их? типа чтобы реально он выполнился только один раз?
так-то оно шустро работает, но впринципе.
 

predator

web designer
я под win сижу
там пхп уже собранный
перекомпилять я не мастак
или там какую либу заменить?
 

predator

web designer
из той-же серии

Linux slack 2.4.29
MySQL 4.1.9
PHP Client API version 4.1.9

запрос
PHP:
SELECT *, 
  IF(INSTR(tag, "_"), CONCAT("\"", REPLACE(tag, "_", " "), "\""), tag) tag_text, 
  REPLACE(tag, "_", " ") tag_clear, 
  (search_num/(SELECT IF(MAX(search_num)=0,"0.01",MAX(search_num)) FROM t_tags)) percent
FROM(
  SELECT t.*, COUNT(l.file_id) cnt, @v:=0 c, IF(@v<5,@v:=1+@v,NULL) bolded
  FROM t_tags t 
  LEFT JOIN t_link l ON l.tag_id=t.id
  WHERE (UNIX_TIMESTAMP()-t.added)<24*60*60 AND CHAR_LENGTH(t.tag)>2
  GROUP BY t.id 
  HAVING cnt>0
  ORDER BY t.search_num DESC LIMIT 15
) tmp
короче с первого раза в bolded NULL
второй раз уже нужные данные
как сделать чтобы с первого запроса выбиралось

смотрим сюда @v:=0 c, IF(@v<5,@v:=1+@v,NULL) bolded

я сам по-раскину мозгами :))
но если кто знает - поделитесь

-~{}~ 15.04.05 15:37:

короче я нашёл решение
сначала устанавливаем переменную
PHP:
SET @v:=0
а потом выполняем запрос, только немного оптимизированный
PHP:
SELECT *,
  IF(INSTR(tag, "_"), CONCAT("\"", REPLACE(tag, "_", " "), "\""), tag) tag_text,
  REPLACE(tag, "_", " ") tag_clear,
  (search_num/(SELECT IF(MAX(search_num)=0,"0.01",MAX(search_num)) FROM t_tags)) percent
FROM(
  SELECT t.*, COUNT(l.file_id) cnt, IF(@v<5,@v:=1+@v,NULL) bolded
  FROM t_tags t
  LEFT JOIN t_link l ON l.tag_id=t.id
  WHERE (UNIX_TIMESTAMP()-t.added)<24*60*60 AND CHAR_LENGTH(t.tag)>2
  GROUP BY t.id
  HAVING cnt>0
  ORDER BY t.search_num DESC LIMIT 15
) tmp
кто не знал - пользуемся!
оченно офигительная весч ;)
 
Сверху