За последние 24 часа нас посетили 17587 программистов и 1678 роботов. Сейчас ищут 1920 программистов ...

Почему считает неверно количество строк??

Тема в разделе "PHP для новичков", создана пользователем Roomlife, 21 ноя 2013.

  1. Roomlife

    Roomlife Активный пользователь

    С нами с:
    6 авг 2010
    Сообщения:
    34
    Симпатии:
    0
    id otdelen
    1 Москва
    2 Воронеж
    3 Барнаул
    4 Екатеринбург
    5 Тула
    6 Владивосток
    7 Киев
    8 Волгоград
    Почему когда я пишу
    Код (Text):
    1. $i=0;
    2. while($rows=mysql_fetch_assoc($sql1)){
    3.         $i++;
    4. }
    5. echo 'В таблице '.$i.' строк';
    Он мне выводит "В таблице 7 строк" хотя их 8 ??
     
  2. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    0
    1
    2
    3
    4
    5
    6
    7
     
  3. Roomlife

    Roomlife Активный пользователь

    С нами с:
    6 авг 2010
    Сообщения:
    34
    Симпатии:
    0
    т.е. мне начальное id всегда делать 0 с пустыми данными?
    Иначе если выводить данные
    Код (Text):
    1. $sql= mysql_query("SELECT * FROM filial"); //Делаем запрос на отделения
    2. $result= mysql_fetch_array($sql);
    3. echo $result[0];
    он пишет 1 а не 0
     
  4. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Код (PHP):
    1. $i=0;
    2. while($rows=mysql_fetch_assoc($sql1)){
    3.         $i++;
    4. }
    5. echo 'В таблице '.$i.' строк'; 
    Я аж прослезился. Восхитительно!

    p.s. count()
     
  5. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Ну, если вы прослезились, то count() заставляет меня рыдать.
    Код (PHP):
    1. $sql = mysql_query("SELECT * FROM `table`");
    2. echo mysql_num_rows($sql); // количество рядов результата запроса 
    Но еще большая печаль от того, что до сих пор народ сидит на mysql_*-функциях работы с БД, когда они уже считаются устаревшими, с версии 5.5 будут вообще удалены, а рекомендуется использовать PDO и MySQLi
     
  6. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    Ваше решение ничем не лучше.

    Допустим есть таблица на миллион записей. Нужно узнать точно их количество. По-вашему проще выгрузить всю таблицу в оперативку, чтобы потом вернуть количество полученных строк?

    Ребят, а SELECT COUNT(*) FROM table не лучше будет? Работает практически бесплатно.
     
  7. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    В отношении вопроса ТС - нет, не будет. Ему надо узнать кол-во записей после выборки по какому-то определенному условию. Иначе, вопрос был бы аля "Как узнать общее количество записей в таблице". Это как бы раз. Мое решение - лучше хотя бы тем, что именно эта функция была и создана для таких задач. Это во-вторых. А count() тут - как пятая лапа собаке. Чтоб ей воспользоваться, как минимум надо "перепаковать" результирующий набор в массив, если что. Это в-третьих.
     
  8. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    LOL что?)
    даже в случае доп. условия. движек пробежится по индексу и быстренько посчитает кол-во. никаких перепаковок никаких массивов делать никто не будет
     
  9. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Я про функцию php - count()! Я придерживаюсь установленного синтаксиса, посему COUNT() в MySQl отличается от синтаксиса php count().
     
  10. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    стало быть ТСу интересно кол-во записей именно в таблице и, сдается мне, запрос у него - селект со звездочкой. И, стало быть, SELECT COUNT для него рулит.
     
  11. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Вообще, подсчет количества записей не самая очевидная задача на самом деле и тут скорее действовать надо исходя из ситуации, способов достаточно. Я лишь указал на count() как на общий метод подсчета строк, пхп или мускуль значения не имеет. Главное не считать количество вот так, пустым циклом )
     
  12. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.115
    Симпатии:
    1.244
    Адрес:
    там-сям
    Вот из-за таких "умников" как вы, пхп-программистов презирают )))

    Roomlife, наверное у тебя действительно 7 строк. Сделай в своём цикле вывод Города, а заодно и $i, тогда всё будет понятно.
     
  13. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Нас, индусов, это не пугает )
     
  14. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    А зря.

    Попытку зарегать пользователя с уже занятым ником тоже пресекаете методом "выгрузить все ники в оперативку и, перебирая по одному, искать совпадение"?

    Если что-то можно спросить у базы, спрашивайте у базы. Вряд ли реализация ее механизмов на пхп будет удачнее того, что она умеет сама.
     
  15. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.115
    Симпатии:
    1.244
    Адрес:
    там-сям
    это всё верно, но вопрос "почему показывает семь строк?". imho - потому что их семь.
     
  16. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Осталось только начать холивар по поводу COUNT([*, id...]) )
    Вообще, если человек считает количество записей циклом, то на лицо незнание других методов подсчета, отсюда и ссылка на count(). Непродолжительное гугление по этому вопросу приведет как пхпшному, так и мускльному варианту, а так другим смежным дисциплинам ) Для себя в качестве ответа я бы предпочел именно "пинок" в нужную сторону.

    з.ы. чисто из приведенного кода - таки да, в выборке оказалось 7 строк.
     
  17. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.115
    Симпатии:
    1.244
    Адрес:
    там-сям
    налицо, что человеку еще не рассказывали про отладку. он ждет ложного результата. какая в жопу эффективность!
    преждевременная оптимизация — зло! тестирование, тестирование и еще раз тестирование )))
     
  18. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    А тестировать лучше всего на продакшене, там сразу видны все косяки ))
     
  19. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    только если не знаешь, что наделал.
    а мне кажется, что Your с самого начала дал правильный ответ. Строк семь по той же причине, по которой у программистов на каждой руке по 4 пальца, но если считать на двух сразу, то их получается 9.
     
  20. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Deonis, array mysql_fetch_assoc ( resource $result )
     
  21. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Хм... а какая связь между количеством пальцев на руке и количеством итераций? Если у нас есть скажем массив на 8 элементов и мы считаем его размер по циклу как топикстартер, то результатом будет 8. То что индексы у него идут от 0 до 7 не имеет отношения к делу.

    p.s. с записями в таблице точно такая же штука ) если их 8 значит их 8.
     
  22. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Эх... если бы вы умели читать глазами. Хотя-бы видеть-это бы вам помогло ;)
     
  23. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.115
    Симпатии:
    1.244
    Адрес:
    там-сям
    цикл в первом посте считает арифметически правильно. проверить нетрудно, правда?

    да, так делать неоптимально, если в реальном цикле больше нет никакой работы кроме $i++.
     
  24. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Улыбнуло. Не сам пост, а внесенные правки. Зря, могли же ещё страницу сгенерировать)
     
  25. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Код (PHP):
    1. $i=0;
    2. while(true) {
    3.     if($i===8) {
    4.         break;
    5.     }
    6.     echo nl2br($i,'
    7.     ');
    8.     ++$i;
    9. }