|
|
|
|
|
для: Trianon
(02.08.2009 в 14:47)
| | :)
Придрались-таки к словам...
Спасибо вам за ответы. Было интересно. | |
|
|
|
|
|
|
|
для: Лена
(02.08.2009 в 12:19)
| | безусловно.
Да и с чего бы функции о чем-то подозревать?
Она, знаете ли, ни сознанием, ни душой не обладает. | |
|
|
|
|
|
|
|
для: Trianon
(02.08.2009 в 11:43)
| | Получается, последовательность такая: строка преобразуется в соответствии с нужным форматом, готовая строка поступает аргументом в функцию php и эта функция видит уже сформированную строку, не подозревая, было ли какое-то форматирующее преобразование или нет. | |
|
|
|
|
|
|
|
для: Лена
(02.08.2009 в 11:25)
| | нет. sql вообще не работает со строкой формата.
Он работает с аргументом функции mysql_query (), до которого строка формата не доходит в принципе.
Он работает - максимум - с результатом форматирующего преобразования, которое как раз и меняет язык с исходного на целевой.
<?
mysql_query(sprintf("SELECT %s FROM %s WHERE name LIKE '%%%s%%'", '*', 'tbl', mysql_escape_string('Вася')));
mysql_query(sprintf('%s WHERE %s', 'UPDATE tbl SET cnt=cnt+1', "name LIKE '%Вася%'"));
|
| |
|
|
|
|
|
|
|
для: Trianon
(31.07.2009 в 18:16)
| | Ясно.
Но строка формата sprintf является частью SQL, иначе SQL бы ее не понимал. | |
|
|
|
|
|
|
|
для: Лена
(31.07.2009 в 15:20)
| | строка языка SQL и строка формата sprintf, порождающая на выходе строку SQL - формально всё ж разные языки.
$format = "SELECT n.nid sn, n.title nt, n.created
FROM {node} n
JOIN {term_node} tn ON n.nid = tn.nid
JOIN {term_data} td ON tn.tid = td.tid
JOIN {vocabulary} v ON td.vid = v.vid
JOIN {upload} up ON up.nid = n.nid
JOIN {files} f ON f.fid = up.fid
WHERE FROM_UNIXTIME(n.created, '%%Y-%%m-%%d') = (CURDATE() - INTERVAL %d DAY) ORDER BY RAND()
";
|
$sql = "SELECT n.nid sn, n.title nt, n.created
FROM {node} n
JOIN {term_node} tn ON n.nid = tn.nid
JOIN {term_data} td ON tn.tid = td.tid
JOIN {vocabulary} v ON td.vid = v.vid
JOIN {upload} up ON up.nid = n.nid
JOIN {files} f ON f.fid = up.fid
WHERE FROM_UNIXTIME(n.created, '%Y-%m-%d') = (CURDATE() - INTERVAL 1 DAY) ORDER BY RAND()
";
|
Обратите внимание на INTERVAL ... DAY | |
|
|
|
|
|
|
|
для: Trianon
(31.07.2009 в 15:03)
| | Поставила %%d, работает.
>Путаете языки.
Почему путаю? Открываю мануал по MySQL, там в таблице определителей сначала идет строка - %d День месяца, число (00..31)
Под ней альтернативный вариант - строка - %e День месяца, число (0..31)
Значит, к одному языку относятся? | |
|
|
|
|
|
|
|
для: Лена
(31.07.2009 в 14:51)
| | Путаете языки.
нужно было поставить %%d | |
|
|
|
|
|
|
|
для: Trianon
(30.07.2009 в 12:03)
| | Разбила на 2 запроса.
Первый запрос:
$sql = "SELECT n.nid sn, n.title nt, n.created
FROM {node} n
JOIN {term_node} tn ON n.nid = tn.nid
JOIN {term_data} td ON tn.tid = td.tid
JOIN {vocabulary} v ON td.vid = v.vid
JOIN {upload} up ON up.nid = n.nid
JOIN {files} f ON f.fid = up.fid
WHERE FROM_UNIXTIME(n.created, '%Y-%m-%e') = (CURDATE() - INTERVAL 1 DAY) ORDER BY RAND()
";
|
И перед вторым запросом проверяю:
if(mysql_num_rows($result)>0)
и тогда делаю второй запрос(он отличается от первого только INTERVAL 2 DAY).
Интересная ситуация сложилась.
Долго не могла понять, почему запрос в phpMyAdmin`e работает, а в модуле не хочет.
Как выяснилось, проблема была в условии:
WHERE FROM_UNIXTIME(n.created, '%Y-%m-%d') = (CURDATE() - INTERVAL 1 DAY)
В Друпале в целях безопасности в запросах с условием используется заполнитель %d, напр. запрос выглядит следующим образом:
$ex = db_query("SELECT * FROM table WHERE id = %d",$id);
А у меня в моем запросе при указании дня я тоже использовала %d, поэтому и не работало.
Пришлось в условии вместо %d поставить %e.
Теперь все в порядке. | |
|
|
|
|
|
|
|
для: Лена
(30.07.2009 в 11:39)
| | Можно, конечно, поизвращаться так:
SELECT n.nid, n.title FROM node n
WHERE FROM_UNIXTIME(n.created,'%Y-%m-%d') = (CURDATE() - INTERVAL 1+(
SELECT COUNT(*) = 0 FROM node WHERE FROM_UNIXTIME(created,'%Y-%m-%d') = (CURDATE() - INTERVAL 1 DAY
)
) DAY)
|
Но по-моему, самое разумное - сделать независимыми запросами.
Кстати, простор для оптимизации исходного запроса тоже немалый. | |
|
|
|
|