Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: mysql + case

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
ridvik
Отправлено: 14 Января, 2014 - 19:11:26
Post Id


Частый гость


Покинул форум
Сообщений всего: 244
Дата рег-ции: Нояб. 2011  


Помог: 0 раз(а)

[+]


Добрый вечер. Объясните пожалуйста, как пользоваться оператором CASE.
Я использую такой запрос:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT id, name, game,
  2. CASE type
  3. WHEN 1 THEN 1
  4. WHEN 2 THEN 2
  5. WHEN 3 THEN 3
  6. ELSE 4 END
  7. FROM dynamit_tournaments WHERE id='1'

Вывожу через
echo "<pre>";
print_r($row);
Показывает:
PHP:
скопировать код в буфер обмена
  1. (
  2.     [0] => 1
  3.     [id] => 1
  4.     [1] => DyNaMiT
  5.     [name] => DyNaMiT
  6.     [2] => 3
  7.     [game] => 3
  8.     [3] => 2
  9.     [CASE type
  10. WHEN 1 THEN 1
  11. WHEN 2 THEN 2
  12. WHEN 3 THEN 3
  13. ELSE 4 END] => 2
  14. )

Вроде как все работает. Но мне нужно что бы выводило по типу такого:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT id, name, game,
  2. CASE type
  3. WHEN 1 THEN (SELECT COUNT(id) FROM dynamit_tournaments_teams_1 WHERE id_tour=1)
  4. WHEN 2 THEN (SELECT COUNT(id) FROM dynamit_tournaments_teams_2 WHERE id_tour=2)
  5. WHEN 3 THEN (SELECT COUNT(id) FROM dynamit_tournaments_teams_3 WHERE id_tour=3)
  6. ELSE (SELECT COUNT(id) FROM dynamit_tournaments_teams_4 WHERE id_tour=4) END
  7. FROM dynamit_tournaments WHERE id='1'

CODE (htmlphp):
скопировать код в буфер обмена
  1. (
  2.     [0] => 1
  3.     [id] => 1
  4.     [1] => DyNaMiT
  5.     [name] => DyNaMiT
  6.     [2] => 3
  7.     [game] => 3
  8.     [3] => 0
  9.     [CASE type
  10. WHEN 1 THEN (SELECT COUNT(id) FROM dynamit_tournaments_teams_1 WHERE id_tour=1)
  11. WHEN 2 THEN (SELECT COUNT(id) FROM dynamit_tournaments_teams_2 WHERE id_tour=2)
  12. WHEN 3 THEN (SELECT COUNT(id) FROM dynamit_tournaments_teams_3 WHERE id_tour=3)
  13. ELSE (] => 0
  14. )

Уже показывает 0, хотя в каждой таблице создал по 1 записи. Народ, помогите как мне такое реализовать?
 
 Top
imya
Отправлено: 15 Января, 2014 - 09:08:49
Post Id



Участник


Покинул форум
Сообщений всего: 1472
Дата рег-ции: Сент. 2012  
Откуда: Запорожье, Украина


Помог: 19 раз(а)




CODE (SQL):
скопировать код в буфер обмена
  1. SELECT top 10 itemid, itemname,
  2. case itemid
  3.   when '01.01.01.01.0010' then (SELECT sum(COSTAMOUNTPOSTED) FROM INVENTTRANS WHERE INVENTTRANS.itemid ='01.01.01.01.0010')
  4.   else 0
  5.  end
  6.  FROM INVENTTABLE


Как пример.
В вашем случае проверяйте фильтры where, скорее всего из-за них выводится 0 записей.


-----
PHP:
скопировать код в буфер обмена
  1. do {box != cat;} while (cat != box);


Когда нормальный человек, уезжая из дома одевает на жену пояс верности, веб-дизайнер ставит на нее счетчик...
 
My status
 Top
EuGen Администратор
Отправлено: 15 Января, 2014 - 09:21:53
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Зачем CASE? Можно просто подставить значение в подзапрос. Ещё правильнее - сделать соответствующий JOIN, иметь одну таблицу и добавить в неё колонку для выбираемого типа.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
imya
Отправлено: 15 Января, 2014 - 09:51:16
Post Id



Участник


Покинул форум
Сообщений всего: 1472
Дата рег-ции: Сент. 2012  
Откуда: Запорожье, Украина


Помог: 19 раз(а)




EuGen пишет:
Ещё правильнее - сделать соответствующий JOIN

Вы имеете ввиду 3 джойна к каждой таблице ?


-----
PHP:
скопировать код в буфер обмена
  1. do {box != cat;} while (cat != box);


Когда нормальный человек, уезжая из дома одевает на жену пояс верности, веб-дизайнер ставит на нее счетчик...
 
My status
 Top
EuGen Администратор
Отправлено: 15 Января, 2014 - 09:53:37
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Нет. Имеется ввиду моя невнимательность (постфиксы у таблиц разные). Однако, подозреваю, выбор такой архитектуры - не лучший выбор (поскольку что, если типов будет, например, 100). Поэтому я рекомендовал бы иметь одну таблицу, в которую следовало бы добавить колонку для выбираемого типа.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
imya
Отправлено: 15 Января, 2014 - 11:01:14
Post Id



Участник


Покинул форум
Сообщений всего: 1472
Дата рег-ции: Сент. 2012  
Откуда: Запорожье, Украина


Помог: 19 раз(а)




EuGen пишет:
иметь одну таблицу, в которую следовало бы добавить колонку для выбираемого типа

Соглашусь, так более разумно.
Автор, прислушайтесь Улыбка


-----
PHP:
скопировать код в буфер обмена
  1. do {box != cat;} while (cat != box);


Когда нормальный человек, уезжая из дома одевает на жену пояс верности, веб-дизайнер ставит на нее счетчик...
 
My status
 Top
SAD Модератор
Отправлено: 15 Января, 2014 - 11:54:02
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


Помог: 75 раз(а)




EuGen пишет:
(постфиксы у таблиц разные)


я тоже было уже решил запрос выложить, но понял, что что - то тут не то
 
 Top
ridvik
Отправлено: 15 Января, 2014 - 12:43:14
Post Id


Частый гость


Покинул форум
Сообщений всего: 244
Дата рег-ции: Нояб. 2011  


Помог: 0 раз(а)

[+]


Возможно вы правы. Я просто подумал что так легче будет осуществлять поиск))) а таблиц 100+ не будет таких)) может максимум 10))) и то наврятли))
(Добавление)
Ответил с небольшим косяком. Даже 10 максимум не будет)) их всего 4 типа)))
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB