function return_month() {
$sql = "SELECT SUBSTRING(`date`,1,7) as month, full_number FROM `".self::$table."`
WHERE SUBSTRING(`date`,1,4) = '".date("Y")."'";
return connectDb::sql($sql);
}
/**
* select users from table #2
*/
function show_month() {
$name = '';
$res = $this->return_month();
if(mysql_num_rows($res) > 0) {
while($row = mysql_fetch_assoc($res)) {
$name[] = $row;
}
}
return $name;
}
Вот такой результат возвращает
[0] => Array
(
[month] => 2011-01
[full_number] => 1 (148) 31 января
)
[1] => Array
(
[month] => 2011-02
[full_number] => 2 (149) 14 февраля
)
[2] => Array
(
[month] => 2011-02
[full_number] => 3 (150) 28 февраля
)
Так правильно составить выборку, что бы скрипт воспринимал 2 массив как первый, то есть что бы было вот так
[0] => Array
(
[month] => 2011-01
[full_number] => 1 (148) 31 января
)
[1] => Array
(
[month] => 2011-02
[full_number] => 2 (149) 14 февраля
[full_number] => 3 (150) 28 февраля
)
Подскажите! Пожалуйста! Спасибо!
Спустя 9 минут, 3 секунды (17.08.2011 - 14:08) waldicom написал(а):
Они должны группироваться по месяцам? Или по какому признаку?
И кстати kirik и linker показали более удобные способы, чем я (это я про substring)
И кстати kirik и linker показали более удобные способы, чем я (это я про substring)
Спустя 4 минуты, 34 секунды (17.08.2011 - 14:13) linker написал(а):
[full_number] => 2 (149) 14 февраляНе бывает в массиве двух и более элементов с одинаковыми ключами. MySQL так не может, сам ручками с помощью пыха.
[full_number] => 3 (150) 28 февраля
Спустя 1 минута, 15 секунд (17.08.2011 - 14:14) m4a1fox написал(а):
waldicom
По месяцам!
По месяцам!
Спустя 1 минута, 11 секунд (17.08.2011 - 14:15) linker написал(а):
Получаешь массив
[0] => Arrayа потом ручками группируешь.
(
[month] => 2011-01
[full_number] => 1 (148) 31 января
)
[1] => Array
(
[month] => 2011-02
[full_number] => 2 (149) 14 февраля
)
[2] => Array
(
[month] => 2011-02
[full_number] => 3 (150) 28 февраля
)
Спустя 1 час, 32 минуты, 18 секунд (17.08.2011 - 15:47) m4a1fox написал(а):
Господа, чисто теоретический вопрос, скажите, почему функция срабатывает только один раз
если я ее применяю вот так
function fileExist($data){
$filename = './file/';
$ext = '.pdf';
$scan = scandir($filename);
if(file_exists($filename.$data.$ext)){
return '<a href="'.$filename.$data.$ext.'">';
}
}
если я ее применяю вот так
function implodeDate(){
$name = '<table width="100%" align="right" border="0"><tr>';
$i = 0;
$number = 3;
foreach($this->show_month() as $key=>$value){
$sum = explode(",", $value['full_number']);
$i++;
$name .= '<td><b>'.$this->postDate($value['month']).'</b><br />';
for($t=0; $t<count($sum); $t++){
-------------------------$name .= $this->fileExist($value['number'])----------------------
.$sum[$t].'</a><br />';
}
if($i == $number){
$i = 0;
$name .= '</tr>';
}
$name .= '</td>';
}
$name .= '</tr></table>';
return $name;
}
Спустя 2 дня, 23 часа, 31 минута, 49 секунд (20.08.2011 - 15:19) m4a1fox написал(а):
Linker
Цитата |
MySQL так не может, сам ручками с помощью пыха |
Может доказано MySQL!! :)
Нашел ответ! Надеюсь кто наткнется на пост тому поможет! Собственно задача была следующая... вот из этого
[0] => Array
(
[month] => 2011-01
[full_number] => 1 (148) 31 января
)
[1] => Array
(
[month] => 2011-02
[full_number] => 2 (149) 14 февраля
)
сделать вот это
[0] => Array
(
[month] => 2011-01
[full_number] => 1 (148) 31 января
[full_number] => 2 (149) 14 февраля
)
или
[0] => Array
(
[month] => 2011-01
[full_number] => 1 (148) 31 января, 2 (149) 14 февраля
)
В общем объединить неким образом!
Собственно основной запрос выглядел так
function return_month() {
$sql = "SELECT SUBSTRING(`date`,1,7) as month, full_number FROM `".self::$table."`
WHERE SUBSTRING(`date`,1,4) = '".date("Y")."'";
return connectDb::sql($sql);
}
Он выводил массивы с информацией, первый код, но вот этот запрос
function return_month() {
$sql = "SELECT SUBSTRING(`date`,1,7) as month,
GROUP_CONCAT(`full_number`) as full_number
FROM `".self::$table."`
WHERE SUBSTRING(`date`,1,4) = '".date("Y")."'";
return connectDb::sql($sql);
}
И вот теперь имеем вид вывода - второй код в этом посту! Удачи!
Спустя 1 день, 17 часов, 25 минут, 3 секунды (22.08.2011 - 08:44) linker написал(а):
m4a1fox
Да мускул может, вот только после mysql_fetch_assoc() (а именно эт оя имел ввиду под "MySQL так не может") у тебя будет только одно поле full_number. По мне задача решена неверное, почему под месяцем 2011-01 присутствует февраль 2 (149) 14 февраля?
Да мускул может, вот только после mysql_fetch_assoc() (а именно эт оя имел ввиду под "MySQL так не может") у тебя будет только одно поле full_number. По мне задача решена неверное, почему под месяцем 2011-01 присутствует февраль 2 (149) 14 февраля?
Спустя 1 час, 10 минут, 9 секунд (22.08.2011 - 09:54) m4a1fox написал(а):
linker
Цитата |
почему под месяцем 2011-01 присутствует февраль 2 (149) 14 февраля |
Это просто пример! То что получилось в итоге! То есть как вся эта структура работает, и какой показывает результат. Пример взят не из вывода!
Спустя 21 минута, 20 секунд (22.08.2011 - 10:16) linker написал(а):
Отбалды я тоже могу насочинять всего и вся, требуются реальные рабочие примеры.
Спустя 1 час, 48 минут, 23 секунды (22.08.2011 - 12:04) m4a1fox написал(а):
linker
Легко! Вот же недоверчивый :) Пример!
Запрос
Легко! Вот же недоверчивый :) Пример!
...
[5] => Array
(
[month] => 06
[full_number] => 10 (157) 6 июня ,11 (158) 22 июня
)
[6] => Array
(
[month] => 07
[full_number] => 13 (160) 18 июля ,12 (159) 4 июля
)
[7] => Array
(
[month] => 08
[full_number] => 14 (161) 1 августа ,15 (162) 15 августа ,16 (163) 29 августа
)
...
Запрос
/**
* select month, full_number, number from table #1
*/
private function return_month() {
$sql = "SELECT SUBSTRING(`date`,6,2) as month,
GROUP_CONCAT(`full_number`) as full_number
FROM `".self::$table."`
WHERE SUBSTRING(`date`,1,4) = '".$this->selectYear()."'
GROUP BY SUBSTRING(`date`,6,2)
";
return connectDb::sql($sql);
}
/**
* select month, full_number, number from table #2
*/
public function show_month() {
$name = '';
$res = $this->return_month();
if(mysql_num_rows($res) > 0) {
while($row = mysql_fetch_assoc($res)) {
$name[] = $row;
}
}
return $name;
}
Спустя 13 минут, 6 секунд (22.08.2011 - 12:17) linker написал(а):
:) я такой, только
if(mysql_num_rows($res) > 0) {лишнее и вначале
$name = array();так оно интуитивно понятно. И ещё не понятно, почему игнорим функции для работы с датами YEAR(`date`), MONTH(`date`), а вместо этого мучаемся со строками.
Спустя 12 минут, 52 секунды (22.08.2011 - 12:30) m4a1fox написал(а):
linker
Цитата |
И ещё не понятно, почему игнорим функции для работы с датами YEAR(`date`), MONTH(`date`), а вместо этого мучаемся со строками |
Да хз если честно! Попробовал обрезать - получилось, вот и использовал! А как Вы предлагаете, что то сначала не получилось (что конкретно - не помню), поэтому не стал заморачиваться! А насчет
Цитата |
if(mysql_num_rows($res) > 0) { $name = array(); |
- за это спасибо - сейчас поправлю!
Спустя 6 минут, 11 секунд (22.08.2011 - 12:36) linker написал(а):
Ну если дата представлена в формате 2011-06-21 (yyyy-mm-dd), то всё должно было получиться сразу. Просто SUBSTRING c его многочисленными цифрами - глаз режет и не сразу видно, что такой запрос делает. Я не настаиваю, я даже не могу сказать как это будет влиять на скорость, просто так.
Спустя 2 минуты, 29 секунд (22.08.2011 - 12:39) m4a1fox написал(а):
linker
Да я понимаю! тогда давай те разберемся! Вот строка (вырвана из запроса)
Вот вариант кот. наиболее удобен
Правильно я понимаю?
Но! Первый вариант - срабатывает, а второй - нет! Ни ошибки, ничего - просто не выводит номер!
Да я понимаю! тогда давай те разберемся! Вот строка (вырвана из запроса)
SELECT SUBSTRING(`date`,6,2) as month,
Вот вариант кот. наиболее удобен
SELECT MONTH(`date`) as month,
Правильно я понимаю?
Но! Первый вариант - срабатывает, а второй - нет! Ни ошибки, ничего - просто не выводит номер!
Спустя 3 минуты, 2 секунды (22.08.2011 - 12:42) m4a1fox написал(а):
linker
Все! Разобрался! Хотите прикольчик (ну я по крайней мере не знал!)! Почему то не срабатывало!
Все! Разобрался! Хотите прикольчик (ну я по крайней мере не знал!)! Почему то не срабатывало!
Спустя 3 минуты, 20 секунд (22.08.2011 - 12:45) linker написал(а):
Я не зря обратил внимание на формат даты
P.S. Ну давай, мы ж не гадалки.
SELECT MONTH('2011-08-22')вернёт значение 8.
P.S. Ну давай, мы ж не гадалки.
Спустя 1 минута, 31 секунда (22.08.2011 - 12:47) m4a1fox написал(а):
У меня есть такой метод -
То есть строка
Вытаскивала месяцы вот так (01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 11, 12) - что - логично так как это ее функция :)
А вот строка
Вытаскивала месяцы вот так (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)
В связи с этим первый скрипт теперь выглядит вот так
И все работает! Спасибо!
/**
* method to transform month from table in the field 'date'. Ex.:(02=>февраль)
*/
private function postDate($d) {
$date = $d;
$month = array(
'01' => 'Январь',
'02' => 'Февраль',
'03' => 'Март',
'04' => 'Апрель',
'05' => 'Май',
'06' => 'Июнь',
'07' => 'Июль',
'08' => 'Август',
'09' => 'Сентябрь',
'10' => 'Октябрь',
'11' => 'Ноябрь',
'12' => 'Декабрь'
);
foreach($month as $k => $v)
{
if($k == $date)
return $date_add = $month[$date];
}
То есть строка
SELECT SUBSTRING(`date`,6,2) as month,
Вытаскивала месяцы вот так (01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 11, 12) - что - логично так как это ее функция :)
А вот строка
SELECT MONTH(`date`) as month,
Вытаскивала месяцы вот так (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)
В связи с этим первый скрипт теперь выглядит вот так
/**
* method to transform month from table in the field 'date'. Ex.:(02=>февраль)
*/
private function postDate($d) {
$date = $d;
$month = array(
'1' => 'Январь',
'2' => 'Февраль',
'3' => 'Март',
'4' => 'Апрель',
'5' => 'Май',
'6' => 'Июнь',
'7' => 'Июль',
'8' => 'Август',
'9' => 'Сентябрь',
'10' => 'Октябрь',
'11' => 'Ноябрь',
'12' => 'Декабрь'
);
foreach($month as $k => $v)
{
if($k == $date)
return $date_add = $month[$date];
}
}
И все работает! Спасибо!
Спустя 34 секунды (22.08.2011 - 12:47) m4a1fox написал(а):
linker
Цитата |
вернёт значение 8. |
Именно! Просто я - не знал!
Спустя 10 минут, 12 секунд (22.08.2011 - 12:57) linker написал(а):
Ну да, нюанс такой немаловажный.