Групирование данных из MySql

SiMM

Новичок
> Разници вообще нет, мне без разници где править SQL, в переменной или в значении функции...
А при чём здесь ты? Я Torу пояснял. А с тобой и так всё понятно - "тебе так удобно вот уже 4.5 года". Наверно так же удобно, как бегать в форум по пустякам.
 

Domovoj

Guest
Автор оригинала: Фанат
Domovoj

тем, что оно не подходит для отладки.
читай PHP FAQ: Ничего не работает! Что делать??? - там всё написано.
Не совсем понял про какой абзац ты оттуда говоришь. Вроде бы про этот:
При возниконовении проблем с функциями mysql (supplied argument is not a valid MySQL result resource) под строкой, где произошла ошибка, обязательно надло вывести на экран mysql_error() и сам запрос - для визуального контроля и копирования на форум.
Если так, то, да, нужно сохранять сам запрос, чтобы его потом посмотреть. Но, я не согласен, что это нужно делать всегда:
1. при тестировании ты всё равно будешь писать "echo" или ещё что-то подобное. Что мешает в этот же момент заменить "= mysql_query ('....')" на "=mysql_query($q='....')" и потом этё временную $q вывести?
2. Тут не уверен, но вроде бы когда ты пишешь $query='....', а потом mysql_query($query), то PHP два раза выделяет память под само содержание строки. Одно - для $query, второй раз - для аргумента функции. Т.к. аргументы передаются по значению, а не по ссылке (опять говорю, что не уверен - в код не лазил). Если точно знаешь, что это не так, дай plz ссылку - интересно было бы почитать.

-~{}~ 12.04.05 11:30:

Автор оригинала: Фанат
Domovoj
а без предварительной записи по массивам слабо? ;-)
Хм. И так тоже можно :)

PHP:
$rs = mysql_query('SELECT * FROM menu ORDER BY group_id'); 

$old = -1;
$ids = '';

while ($row = mysql_fetch_array($rs)) {
    if ($row['group_id'] !== $old) {
        if ($old > 0) {
              ?><?=$ids?></td></tr><?
        }
        $old = $row['group_id'];
        $ids = $row['id'];
        ?><tr><td><?=$old?></td><td><?
    }
    else {
        $ids .= ', '.$row['id'];
    }
}
if ($old > 0) {
   ?><?=$ids?></td></tr>
}

Только вот насчёт скорости - не факт, что так быстрее будет.

+ Выборка данных смешана с самим выводом таблицы. А это не есть гуд.
 

Фанат

oncle terrible
Команда форума
Что мешает в этот же момент заменить
а зачем что-то заменять, если всё может делаться автоматом, просто по факту возникновения ошибки?
а если речь идёт не о тестировании, а о работающем сайте? как ты будет "этот" момент отлавливать?
PHP два раза выделяет память под само содержание строки
интересный аргумент. и часто ты встречался с проблемами переполнения памяти запросами?

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

Domovoj

Guest
Автор оригинала: Фанат
тем, что оно не подходит для отладки.
читай PHP FAQ: Ничего не работает! Что делать??? - там всё написано.
А, ну всё, понял про что вы. Про постоянный вывод текста ошибок и обязательные проверки. Да, согласен. Надо отслеживать всегда. Просто как-то раньше не задумывался, т.к. автоматом исползую нечто вроде "$rs = my_mysql_query('.....');", а ошибки внутри my_mysql_query и проверяются.

Кстати, разве то, что выдаёт mysql_query не то же самое, что содержится в mysql_error?

-~{}~ 12.04.05 11:38:

Автор оригинала: Фанат
интересный аргумент. и часто ты встречался с проблемами переполнения памяти запросами?
Нет

особенно забавно этот комментарий смотрится от челвоека, который олько что привёл код, который дублирует результат запроса. оптимизация на марше, да.
см. объяснение выше - на мой взгляд мешать вывод и выборку данных - плохо.

А если надо будет несколько раз тебе тот же самый массив обработать? Ты будешь ещё один запрос отправлять?

Так что можешь считать, что это было оптимизация под template engine + кэширование данных :)
 

Фанат

oncle terrible
Команда форума
автоматом исползую нечто вроде "$rs = my_mysql_query('.....');",
а почему тогда спорить стал?
написано же:
либо
$sql = wrapper("SELECT group_id FROM menu");
то есть, вариант был описан.
Кстати, разве то, что выдаёт mysql_query не то же самое, что содержится в mysql_error?
нет.
 

Фанат

oncle terrible
Команда форума
А если надо будет несколько раз тебе тот же самый массив обработать
а если бы у бабушки были мужские вторичные половые признаки, то это был бы не бабушка, а дедушка.
не надо высасывать из пальца вводные. палец будет болеть.
Так что можешь считать, что это было оптимизация под template engine
вот это совершенно законный аргумент. верно, правильнее сначала сделать массив.
 
Сверху