За последние 24 часа нас посетил 50001 программист и 1733 робота. Сейчас ищут 764 программиста ...

Запрос подсчета совпадений

Тема в разделе "MySQL", создана пользователем kit, 11 окт 2013.

  1. kit

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

    С нами с:
    18 дек 2006
    Сообщения:
    331
    Симпатии:
    1
    Адрес:
    местный
    Всем привет!
    Задача: создать запрос с помощью которого бы создавался массив с подсчитанными значениями одного столбца.
    Пример таблицы t:
    type_a
    2
    3
    1
    1
    1
    пишу запрос:
    Код (Text):
    1.  
    2. $qery="SELECT count(type_a=1), count(type_a=2), count(type_a=3) FROM t";
    3. $table=mysql_query($query);
    4. $table_=mysql_fetch_array($table);
    По моему (неправильному) мнению массив должен получиться таким:
    $table_[type_a=1]=3
    $table_[type_a=2]=1
    $table_[type_a=3]=1
    Однако так не получается. Пожалуйста помогите составить правильный запрос.
    Еще нюанс. Делать три запроса с "...where type_a=..." не получится, запрос должен быть один.
    Заранее благодарен за помощь!
     
  2. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
  3. kit

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

    С нами с:
    18 дек 2006
    Сообщения:
    331
    Симпатии:
    1
    Адрес:
    местный
    то же не пойдет, условие должно быть до WHERE.
    На самом деле это упрощенная версия запроса, после "WHERE" там еще куча условий.
    Почему "SELECT count(*) FROM t", то есть все записи считает правильно, а "SELECT count(type_a=1) FROM t" выдает какую то фигню?
    Я понимаю, что по всей видимости фигню пишу - фигню выдает, но как тогда сделать правильно?
     
  4. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    читать документацию. найти ее просто: в адресной строке браузера набери "mysql group by"
     
  5. kit

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

    С нами с:
    18 дек 2006
    Сообщения:
    331
    Симпатии:
    1
    Адрес:
    местный
    Да говорю же group by нельзя, группировка будет по другим условиям. Надо эту задачу решить до WHERE.
    Хотел рисунок из phpMyAdmin прикрепить, но не знаю как.
    В общем ответ на мой запрос "SELECT count(type_a =1), count(type_a =2), count(type_a =3) FROM t" такой (выдает в виде таблицы):
    type_a=1 type_a=2 type_a=3
    0 1 0
    0 0 1
    1 0 0
    1 0 0
    1 0 0
    т.е. осталось подсчитать количество единиц в каждом столбце (как???), но count упорно не хочет этого делать.
     
  6. artoodetoo

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

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

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

    С нами с:
    18 дек 2006
    Сообщения:
    331
    Симпатии:
    1
    Адрес:
    местный
    Никто не помог, пришлось потратить ночь, но решил САМ!)))
    Вот запрос:
    Код (Text):
    1. SELECT
    2. (SELECT type_a FROM t AS b WHERE type_a=1),
    3. (SELECT type_a FROM t AS b WHERE type_a=2),
    4. (SELECT type_a FROM t AS b WHERE type_a=3)
    5. FROM t AS a
    a и b ввел т.к. в моем случае после FROM t AS a есть еще WHERE... и т.д. и необходимо еще кой-чего выбрать.
    Может конечно и топорно, но в моем случае работает отлично (если есть идеи как упростить - буду благодарен).
    Всем спасибо, а artoodetoo идет в угол жевать сено (хе-хе-хе!)
     
  8. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Мда товарищ, ты крут:)
    Слушай просто уже интересно становится а что ты сделаешь когда type_a будет 200?:)
     
  9. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    офигительно! :)
     
  10. kit

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

    С нами с:
    18 дек 2006
    Сообщения:
    331
    Симпатии:
    1
    Адрес:
    местный
    В моем случае их ровно три!