За последние 24 часа нас посетили 17864 программиста и 1719 роботов. Сейчас ищут 904 программиста ...

mysql запрос + case

Тема в разделе "MySQL", создана пользователем ridvik, 14 янв 2014.

  1. ridvik

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

    С нами с:
    7 июл 2012
    Сообщения:
    64
    Симпатии:
    0
    Добрый вечер. Столкнулся с проблемой. Имеется запрос:
    Код (Text):
    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'
    вывожу через: print_r();
    Показывает:
    Код (Text):
    1. Array
    2. (
    3.     [0] => 1
    4.     [id] => 1
    5.     [1] => DyNaMiT
    6.     [name] => DyNaMiT
    7.     [2] => 3
    8.     [game] => 3
    9.     [3] => 2
    10.     [CASE type
    11. WHEN 1 THEN 1
    12. WHEN 2 THEN 2
    13. WHEN 3 THEN 3
    14. ELSE 4 END] => 2
    15. )
    Вроде как все норм. Но по сути мне нужен запрос вида:
    Код (Text):
    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'
    Который к сожалению отображается так:
    Код (Text):
    1. Array
    2. (
    3.     [0] => 1
    4.     [id] => 1
    5.     [1] => DyNaMiT
    6.     [name] => DyNaMiT
    7.     [2] => 3
    8.     [game] => 3
    9.     [3] => 0
    10.     [CASE type
    11. WHEN 1 THEN (SELECT COUNT(id) FROM dynamit_tournaments_teams_1 WHERE id_tour=1)
    12. WHEN 2 THEN (SELECT COUNT(id) FROM dynamit_tournaments_teams_2 WHERE id_tour=2)
    13. WHEN 3 THEN (SELECT COUNT(id) FROM dynamit_tournaments_teams_3 WHERE id_tour=3)
    14. ELSE (] => 0
    15. )
    Уже показывает 0, хотя в каждой таблице создал по 1 записи(то есть запись соответствует критериям). Народ, помогите как мне такое реализовать?
     
  2. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    за исключением того, что у тебя все значения по два раза идут. используй _assoc

    Это не тот запрос, который тебе нужен

    http://yandex.ru/yandsearch?text=mysql+join
     
  3. ridvik

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

    С нами с:
    7 июл 2012
    Сообщения:
    64
    Симпатии:
    0
    я думал про join, но не могу логику понять, как связать таблицы в данном случае. Подскажите пожалуйста или дайте пример. Заранее благодарен.
     
  4. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Я не смогу. Может кто другой поможет. Поапай тему.
     
  5. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    все зависит от того как они связаны?
    таблицы dynamit_tournaments и dynamit_tournaments_teams_1... по какому полю связаны? почему их четыре? может оставить одну но добавить поле type и по нему отличать эти teams? тогда и запрос получится очень простой и быстрый
     
  6. ridvik

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

    С нами с:
    7 июл 2012
    Сообщения:
    64
    Симпатии:
    0
    Все зависит от поля type в dynamit_tournaments. Поле содержит от 1 до 4. То бишь в поле может быть только 4 значения. Отличать как раз по типу: то бишь если type = 1 то нужно искать в dynamit_tournaments_teams_1. Но скорее всего я просто объединю эти таблицы в одну, похоже так все же действительно будет проще)
     
  7. uri

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

    С нами с:
    3 сен 2009
    Сообщения:
    43
    Симпатии:
    1
    может union, не?