MYSQL Иногда пропадают значения переменных установленных в запросе методом @var:=

Grive

Новичок
MYSQL Иногда пропадают значения переменных установленных в запросе методом @var:=

Ничего не могу понять может кто сталкивался.
Есть запрос:

PHP:
SELECT cp.*, sm.sm_name 'melody_name' , sn.singer_name 'singer_name', ls.id 'local_singer_id',
@cm:=DATE_SUB(FROM_UNIXTIME(cp.date), INTERVAL (WEEKDAY(FROM_UNIXTIME(cp.date))) DAY) 'monday_ch',
@nm:=(DATE_SUB(NOW(), INTERVAL (WEEKDAY(NOW())) DAY)) 'monday_cur',
@dif_days:=(TO_DAYS(@nm)-TO_DAYS(@cm)) 'dif_days',
FLOOR(@dif_days / 7) 'weeks',
MOD(@dif_days,7) 'error'

FROM charts_playlists cp, charts_singer_melody sm, charts_net_singers sn, charts_local_singers ls
WHERE cp.id_ch_names='{$id_chart}'
AND ((cp.id_melody=sm.sm_id) OR !cp.id_melody)
AND sm.sm_singer_id=sn.singer_id
AND ls.net_singer_id=sn.singer_id

GROUP BY cp.id
ORDER BY cp.cur_pos
Обратить внимание нужно только на ту часть что работает с датами.

Иногда значения перменных @nm, @dif_days,@cm кудато пропадают приблизительно каждая десятая интерация, иногда по несколько раз в подряд!

т.е. не работает та часть запроса, которая выводит разницу в неделях между двумя датами.

запрос выполняется посредством языка PHP а если точнее то PEAR
 

svetasmirnova

маленький монстрик
Каким образом проявляется, что "@nm, @dif_days,@cm кудато пропадают"?
 

Grive

Новичок
они не пропадают и ошибок никаких, просто возвращают ноль

причем я тот же самый вопрос прогоняю через MYSQLFront
ничего никуда не пропадает хотя может дело случая.

а если нет, то думаю причину нужно искать где то в PEAR
или mysql_query
 

svetasmirnova

маленький монстрик
В mysql_query вряд ли причина. Скорее совпадение, но можно усложнить запрос и писать полученные данные в лог:
[sql]
SELECT cp.*, sm.sm_name 'melody_name' , sn.singer_name 'singer_name', ls.id 'local_singer_id',
@t1:= NOW() 'concrete_now',
@cm:=DATE_SUB(FROM_UNIXTIME(cp.date), INTERVAL (WEEKDAY(FROM_UNIXTIME(cp.date))) DAY) 'monday_ch',
@nm:=(DATE_SUB(@t1, INTERVAL (WEEKDAY(@t1)) DAY)) 'monday_cur',
@dif_days:=(TO_DAYS(@nm)-TO_DAYS(@cm)) 'dif_days',
...
[/sql]
типа так
Потом посмотреть что в concrete_now и сделать вывод
 

Grive

Новичок
причем
..@nm:=(DATE_SUB(NOW(), INTERVAL (WEEKDAY(NOW())) DAY)) 'monday_cur', @nm as 'test'

'monday_cur' -всегда вернет значение в скрипт
а вот уже 'test' вернет пустоту

т.е.
row['monday_cur']=='11.11.2005 ... '
а
row[''test'']==Empty

-~{}~ 17.03.06 15:24:

svetasmirnova
ок позже попробую таким способом, но не думаю что он даст какие то явные результаты
грешу на php

версия PHP Version 5.1.2
работает как CGI
 

svetasmirnova

маленький монстрик
C:\My Documents>php -r "mysql_connect(); $res = mysql_query('select @nm:=(DATE_SUB(NOW(), INTERVAL (WEEKDAY(NOW())) DAY)) \'monday_cur\', @nm as \'test\''); while ($row = mysql_fetch_assoc($res)) var_dump($row);"
array(2) {
["monday_cur"]=>
string(19) "2006-03-13 15:29:22"
["test"]=>
string(19) "2006-03-13 15:29:22"
}

C:\My Documents>php -v
PHP 5.1.3-dev (cli) (built: Jan 18 2006 16:27:39)

PHP не причём
 

Grive

Новичок
да я знаю что значение должно вернуться и вернется у всех
но вот у меня не всегда :)

-~{}~ 17.03.06 15:39:

ладно буду позже еще разбираться
svetasmirnova
спасибо.
 
Сверху