Есть mysql таблица с несколькими полями — id,f1,f2…f30
Состояние полей f может быть либо «on» либо NULL

Как сделать выборку строки с определенным id и полей содержащих «on» и вывести их в следующем виде (именно названия полей со значением «on»):

f1
f2

f18

f30?

Tagged with →  

31 Responses to Как сделать выборку строки с определенным id

  1. 5auam:

    SQL-запросом никак.

  2. HsaEkb:

    NOT NULL не подойдет?

  3. DraSnow:

    Ситуация следующая. Какой-то дебил писал дополнение к карточке товара — иконки параметров, которые показываются в админке и напротив нужных отмечается чекбокс. Данные пишутся в отдельную таблицу, где f1 — f30 айдишники картинок и on/NULL их состояния. Названия картинок в папке, соответственно, f1-f30

    У меня задача вывести отмеченные картинки на странице товара. Но как блядь, если там только «on»???

  4. DraSnow:

    я чуть выше задачу описал, мне кажется, что не подойдет

  5. KipaTa:

    select «f1″ from table where id={id} and f1=»on»
    UNION select «f2″ from table where id={id} and f2=»on»
    UNION select «f3″ from table where id={id} and f3=»on»
    UNION select «f4″ from table where id={id} and f4=»on»
    UNION select «f5″ from table where id={id} and f5=»on»

    UNION select «f30″ from table where id={id} and f30=»on»

  6. DraSnow:

    но это же пиздец!

  7. AkhSpb:

    MSSQL Pivot/Unpivot?

  8. TefYes:

    ID известен заранее, так?

  9. 5auam:

    во-первых, можно всё разобрать скриптом. во-вторых, можно легко переделать структуру базы.

  10. DraSnow:

    что можно сделать, не меняя структуры?

  11. 5auam:

    очевидно, выбрать запись по id и разобрать её скриптом.

  12. Nirer:

    вот принтскрин из этой книги. с union’ами вроде бы понятнее выглядит.

    а на клиенте-то нельзя что ли транспонировать результирующий набор данных?

  13. AsaEkb:

    Какая то странная схема. Полной задачи не знаю, но судя по запросу, все эти f нужно хранить одним сетом. Ну и если есть ID, то фильтровать проще на клиенте.

  14. 905en:

    Как вариант сделать селект с if(f1=»on»,»F1″,null) и слить в одну строку. Перезалить в другую таблицу, ей и пользоваться.

  15. 01pSpb:

    битовой маской даже

  16. MsdGood:

    А в чём проблема в шаблонизаторе при выводе картинок выполнять проверку на on/NULL и, соотв., выводить очередную картинку или не выводить?
    Или я задачу всё-таки не понял?

  17. AsaEkb:

    SET на уровне хранения и есть битовая маска(+ чуть мета-информации к таблице)

  18. AsaEkb:

    У SET’а, по сравнению с int, плюс — можно посмотреть глазками прямо в базе. Но добавление нового элемента — alter table.

  19. DraSnow:

    $jdbo =& JFactory::getDBO();
    $query=»SELECT * FROM #__vm_care WHERE product_id=’$product_id’;»;
    $jdbo->setQuery($query);
    $cares=$jdbo->loadAssoc();
    if($cares[«f1»]==’on’) echo ««;
    if($cares[«f2»]==’on’) echo ««;

    вроде работает. и хуй с ним

  20. KriYes:

    нда, всего-то 35 строчек.
    $rs = mysql_query(‘select concat_ws(‘,’, f1…f30) from table where id=’.$id);
    $ar = explode(‘,’, mysql_fetch_assoc($rs));
    foreach($ar as $k=>$v) echo $v==’on’?’yep’:’nope’;

  21. Ssaef:

    Раз пошла такая пьянка то и $k=>$v лишнее.

  22. RedSm:

    Справедливости ради, код выше тоже можно сократить:

    $cares = $jdbo–>setQuery(«SELECT * FROM #__vm_care WHERE product_id=’$product_id’;»)->loadAssoc();

  23. KriYes:

    да можно, конечно.

  24. RedSm:

    А вот хуй, метод setQuery(), как выяснилось, ничего не возвращает. I fucking love Joomla!.

  25. Regwhite:

    зато отвечает условиям задачи

  26. DraSnow:

    да, но даже я, долбоеб, сделал проще!

  27. DicZZ:

    «SELECT * FROM #__vm_care WHERE product_id=’$product_id’;»!!! нет слов просто…

Добавить комментарий