За последние 24 часа нас посетил 34181 программист и 1709 роботов. Сейчас ищут 768 программистов ...

погрешность

Тема в разделе "MySQL", создана пользователем rustoke, 16 фев 2015.

  1. rustoke

    rustoke Новичок

    С нами с:
    20 сен 2014
    Сообщения:
    145
    Симпатии:
    0
    вывожу через echo количество записей из бд... почему погрешность составляет 4 записи ? должно быть 500, выводит 504 ? почему так?
    Код (Text):
    1.  
    2. $m_all = mysql_fetch_row(mysql_query("SELECT COUNT(*) FROM base WHERE num = '1' ")); echo $m_all[0];
     
  2. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    а как ты указал, что записей должно быть 500? ну, кроме усилия воли.
     
  3. rustoke

    rustoke Новичок

    С нами с:
    20 сен 2014
    Сообщения:
    145
    Симпатии:
    0
    у каждой записи в поле num стоит 1.. из тысячи записей , 500 с num
     
  4. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    а помоему ты в первом посте показал, что таких записей 504. я больше верю в COUNT() чем в тебя.
     
  5. rustoke

    rustoke Новичок

    С нами с:
    20 сен 2014
    Сообщения:
    145
    Симпатии:
    0
    я просто заметил несоответствие, после того как отсортировал записи через city
    $m_all - это общее число, оно должно быть равно $m_1 + $m_2, но если сложить $m_1 + $m_2, то $m_all на 4 записи больше

    Код (Text):
    1.  
    2. $m_1 = mysql_fetch_row(mysql_query("SELECT COUNT(*) FROM base WHERE num = '1' city='1' "));
    3. $m_2 = mysql_fetch_row(mysql_query("SELECT COUNT(*) FROM base WHERE num = '1' city='2' "));
     
  6. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Код (Text):
    1. SELECT * FROM `base` WHERE `num` = '1' AND `city` NOT IN ('1', '2')
    найди эти 4 строки
     
  7. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    rustoke, в предыдущем посте ты пропустил какой-то знак, вероятно AND.
    как логично предположил [vs], вероятно сумма не сходится от того, что где-то city может быть не 1 и не 2.

    выведи результат запроса "SELECT num, city, COUNT(*) FROM base GROUP BY num, city" — узнаешь какие сочетания значений и в каком количестве у тебя присутствуют.
     
  8. rustoke

    rustoke Новичок

    С нами с:
    20 сен 2014
    Сообщения:
    145
    Симпатии:
    0
    SELECT * FROM `base` WHERE `num` = '1' AND `city` NOT IN ('1', '2') - выводит тоже самое значение , что и у меня....
    ...AND забыл здесь на форуме дописать, а так он есть... SELECT num, city, COUNT(*) FROM base GROUP BY num, city - этот вариант показывает пустое значение...
    думаю в бд в какой то из строк пустые значения city либо num.... буду искать.... спасибо за ответы
     
  9. rustoke

    rustoke Новичок

    С нами с:
    20 сен 2014
    Сообщения:
    145
    Симпатии:
    0
    нашел погрешность, в базе было 4 строки полностью пустые. тема закрыта
     
  10. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    об этом тебе должен был сказать SELECT…GROUP BY. теперь ты это понимаешь?
     
  11. rustoke

    rustoke Новичок

    С нами с:
    20 сен 2014
    Сообщения:
    145
    Симпатии:
    0
    Подскажите, как реализовать что то типа:
    Код (Text):
    1.  
    2. SELECT * FROM `base` WHERE `num` = '1' AND `num` != '2'
    т.е. 2 значения для одной переменной
     
  12. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    Что ты этим хотел сказать? Условие WHERE описывает какой должна быть выбранная запись. В одной записи поле не может равняться сразу двум разным значениям. "Вася упорот И Вася трезв" — это невозможно. Такой Вася не попадет в выборку.

    Но если ты хотел сказать "num равен одному из двух значений", то
    Код (Text):
    1. … WHERE `num`=1 OR `num`=2
    или
    Код (Text):
    1. … WHERE `num` IN (1, 2)
    или
    Код (Text):
    1. … WHERE `num` BETWEEN 1 AND 2
    или
    Код (Text):
    1. SELECT … WHERE `num`=1
    2. UNION
    3. SELECT … WHERE `num`=2
     
  13. rustoke

    rustoke Новичок

    С нами с:
    20 сен 2014
    Сообщения:
    145
    Симпатии:
    0
    UNION помог, я совсем забыл про него, спасибо!
    я хотел что бы num = 1 и не был равен пустому значению num != ''
     
  14. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    знаешь друг, не стыдно чего-то не знать. стыдно изображать из себя того, кем не являешся. это всё равно заметят.

    и тебе надо подтянуть скиллы в логике: когда используется И, а когда ИЛИ.