За последние 24 часа нас посетили 18643 программиста и 1600 роботов. Сейчас ищут 978 программистов ...

Выборка количества непустых полей

Тема в разделе "PHP и базы данных", создана пользователем Boolean_Type, 9 ноя 2014.

  1. Boolean_Type

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

    С нами с:
    9 апр 2014
    Сообщения:
    9
    Симпатии:
    0
    Есть таблица, в ней книги и авторы. Сколько авторов добавит пользователь, неизвестно. Нужно вытащить названия тех книг, у которых более трёх авторов.
    Есть , конечно, простое решение: добавить доп. поле с количеством авторов каждой книги. Тогда:
    Код (Text):
    1. SELECT book_name FROM books WHERE count >= 3
    Но, предположим, добавление поля count недопустимо. Можно ли как-то составить запрос, который вернёт количество непустых колонок независимо от их количества?
    На худой конец можно так:
    Код (Text):
    1. SELECT book_name FROM books WHERE author_1 !='' AND author_2 !='' AND author_3 !=''
    Но это не подходит, если кол-во авторов изменится...

    Отмечу, что отношение я составляю сам, так что полям авторов необязательно быть пуст. строкой, можно и NULL. Также можно поменять структуру таблицы. Это на случай, если предлагаемые решения будут радикальными :)
     
  2. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    кол-во можно агрегировать налету функцией count() и потом отбирать через having всё значения больше 3
     
  3. Boolean_Type

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

    С нами с:
    9 апр 2014
    Сообщения:
    9
    Симпатии:
    0
    Но count() же считает кол-во значений (строк) в одном поле, а мне бы посчитать кол-во полей, причём имена их доподлинно неизвестны, т.к. поля могут добавляться)

    В общем, решил делать нормализацию (разбил на 2 отношения) и тогда уже применять GROUP BY.
    Спасибо.