1. результат различных SELECT-ов: почему бы не возвращать его в виде массива сразу, а не в виде неудобоваримого ресурса, из которого потом инфу приходится по одной строчке выковыривать?
Если результатом селекта будет таблица из 5 строк, то чтобы вывести её на экран, к примеру, мы же все равно 5 раз вызываем функцию типа mysql_fetch_... и все равно получаем массивы на выходе, так почему бы не вернуть сразу массив и работать с ним напрямую, чтобы избежать этих ненужных вызовов функций?
2. Результат запросов вида "SELECT count(*)..." вообще удивил: делая такой запрос, программист желает получить количество записей, т.е. просто одно единственное число. Зачем возвращать какую-то извратную таблицу с одной единственной ячейкой, из которой результат надо выковыривать, используя лишний вызов функции?
Я понимаю, что разработчики PHP люди не глупые и опыта у них явно поболее моего, поэтому хочу просто разобраться, почему сделали именно так.
Так что прошу мои вопросы не воспринимать как вопли типа "они все дураки, а я гений, хоть и новичек!"
![smile.gif](http://phpforum.ru/html/emoticons/smile.gif)
P.S. Есть подозрение, что select-ы и count(*) не всегда используют так примитивно, как я сейчас - поэтому и результаты возвращают именно в таком виде. Может кто примерчик подскажет, где это оправдано?
Спустя 1 час, 42 минуты, 55 секунд (1.10.2011 - 15:01) Winston написал(а):
Цитата (Mescalero @ 1.10.2011 - 13:19) |
мы же все равно 5 раз вызываем функцию типа mysql_fetch_ |
Ты пять раз подряд пишешь mysql_fetch_assoc ?
![blink.gif](http://phpforum.ru/html/emoticons/blink.gif)
Для этого существует цикл while и другие
![smile.gif](http://phpforum.ru/html/emoticons/smile.gif)
Цитата (Mescalero @ 1.10.2011 - 13:19) |
Так что прошу мои вопросы не воспринимать как вопли типа "они все дураки, а я гений, хоть и новичек!" |
На первый взгляд так и выглядит
![smile.gif](http://phpforum.ru/html/emoticons/smile.gif)
Цитата (Mescalero @ 1.10.2011 - 13:19) |
P.S. Есть подозрение, что select-ы и count(*) не всегда используют так примитивно, как я сейчас |
Верно.
Цитата (Mescalero @ 1.10.2011 - 13:19) |
Может кто примерчик подскажет, где это оправдано? |
Спустя 1 час, 11 минут, 48 секунд (1.10.2011 - 16:13) neadekvat написал(а):
Цитата (Winston @ 1.10.2011 - 16:01) |
ТЫЦ и примеров завались |
Да ну, слишком широкий запрос, чего там найти то можно полезного?
Цитата (Mescalero @ 1.10.2011 - 14:19) |
1. результат различных SELECT-ов: почему бы не возвращать его в виде массива сразу, а не в виде неудобоваримого ресурса, из которого потом инфу приходится по одной строчке выковыривать? |
Ты не учел, что ресурс можно использовать не только в mysql_fetch_*, но и в n-ом количестве других функций. Другими словами - ресурс - это не просто звено последовательной цепи, это точка, от которой расходится множество линий для возможного использования.
Цитата (Mescalero @ 1.10.2011 - 14:19) |
Результат запросов вида "SELECT count(*)..." вообще удивил |
Если нужно получить количество всех строк (только лишь это) и сами строки, то разумнее использовать функцию mysql_num_rows, а в select пихать поля, необходимые для выборки.
По поводу расширенного использования, о котором ты "догадываешься": обычно это используется для получения не количества всех строк, а по определенной группировке GROUP BY. Например, когда в каталоге товаров надо проставить количество товаров возле категорий, нужно пользоваться именно этим способом, а не делать отдельный SELECT COUNT(*) на каждую конкретную категорию, как частенько поступают новички.
Спустя 9 минут, 4 секунды (1.10.2011 - 16:22) Winston написал(а):
Цитата (neadekvat @ 1.10.2011 - 16:13) |
Да ну, слишком широкий запрос, чего там найти то можно полезного? |
Ну например четвертый результат очень даже не плохой
![smile.gif](http://phpforum.ru/html/emoticons/smile.gif)
Спустя 3 минуты, 6 секунд (1.10.2011 - 16:25) neadekvat написал(а):
Лучше б указал на свою подпись, намного полезнее. Причем для всех категорий программистов, как мне кажется.
Спустя 2 часа, 52 минуты, 25 секунд (1.10.2011 - 19:18) Mescalero написал(а):
Цитата (Winston @ 1.10.2011 - 12:01) | ||
Ты пять раз подряд пишешь mysql_fetch_assoc ? ![]() Для этого существует цикл while и другие ![]() |
Это понятно, с циклами я знаком
![smile.gif](http://phpforum.ru/html/emoticons/smile.gif)
Спустя 7 минут, 38 секунд (1.10.2011 - 19:25) Mescalero написал(а):
Цитата (Winston @ 1.10.2011 - 12:01) | ||
|
уже дошло, что я маленько не так пытался гуглить ) попробую с другой стороны..
Спустя 1 день, 13 часов, 8 минут, 41 секунда (3.10.2011 - 08:34) linker написал(а):
Сразу видно, что человек либо первый раз сел за программирование, либо никогда не работал с базами данных.
1. Что такое сервер баз данных? Это набор баз данных. Что такое база данных? Это набор таблиц. Что такое таблица? Это набор вертикальных столбцов и горизонтальных записей. Пересечение столбца и записи - ячейка. В школе наверное рисовал таблицы. Запрос отдаёт нечто неудобоваримое, которое должно по желанию программиста превратиться во что-то осмысленное - массив. В PHP превращение из непонятного в понятное делается с помощью mysql_fetch_...(). Вот тут встаёт выбор, а что мне нужно. Вспоминаем, что столбцы - это именованные, так сказать поля таблицы, но также каждый столбце может индексироваться от 0 до N. Т.е. чтобы обратиться к определенной ячейки в записи мне нужно либо использовать индексы, то mysql_fetch_row(). Либо я обращаюсь по имени столбца, тогда mysql_fetch_assoc(). Я могу прервать цикл
2. Читаем что такое базы данных и что они возвращают (ни PHP, ни MySQL тут ни причём). Результатом любого запроса есть таблица результатов. Уж извини, но тебе придётся привыкнуть к этому. Именно поэтому, результатом COUNT() является таблица с одной строкой и одним столбцом. Хочешь ты или нет, но PHP похрену на то, что у тебя запросе написано SELECT COUT(), ему вообще похрену на твой запрос, ибо не PHP выполняет запросы, а MySQL. Дело PHP - это отдать тебе результаты работы MySQL, всё остальное - это твои проблемы.
1. Что такое сервер баз данных? Это набор баз данных. Что такое база данных? Это набор таблиц. Что такое таблица? Это набор вертикальных столбцов и горизонтальных записей. Пересечение столбца и записи - ячейка. В школе наверное рисовал таблицы. Запрос отдаёт нечто неудобоваримое, которое должно по желанию программиста превратиться во что-то осмысленное - массив. В PHP превращение из непонятного в понятное делается с помощью mysql_fetch_...(). Вот тут встаёт выбор, а что мне нужно. Вспоминаем, что столбцы - это именованные, так сказать поля таблицы, но также каждый столбце может индексироваться от 0 до N. Т.е. чтобы обратиться к определенной ячейки в записи мне нужно либо использовать индексы, то mysql_fetch_row(). Либо я обращаюсь по имени столбца, тогда mysql_fetch_assoc(). Я могу прервать цикл
while($row = mysql_fetch_assoc($res)) {}по каким-либо причинам и тогда нахрена мне хранить массив всех записей. Плюс, в цикле я могу поэтапно группировать выбираемые элементы или делать с ними какие-то операции, нахрена мне целая куча массивов. Получается, что используя ссылку на ресурс Я ЖУТКО ЭКОНОМЛЮ ПАМЯТЬ.
2. Читаем что такое базы данных и что они возвращают (ни PHP, ни MySQL тут ни причём). Результатом любого запроса есть таблица результатов. Уж извини, но тебе придётся привыкнуть к этому. Именно поэтому, результатом COUNT() является таблица с одной строкой и одним столбцом. Хочешь ты или нет, но PHP похрену на то, что у тебя запросе написано SELECT COUT(), ему вообще похрену на твой запрос, ибо не PHP выполняет запросы, а MySQL. Дело PHP - это отдать тебе результаты работы MySQL, всё остальное - это твои проблемы.