Как оператор не работает с датой

0

Я пытаюсь вернуть запись, содержащую год даты, позвольте мне объяснить лучше, это мой запрос:

$query = "SELECT coach.*
  FROM coach_career coach_cr
  LEFT JOIN coach coach ON coach.id = coach_cr.coach_id
  LEFT JOIN competition_seasons s ON s.id = :season_id
  WHERE coach_cr.team_id = 95 AND 'start' LIKE '%2017/2018%'";

Мне нужно выбрать все поля coach на coach_career, coach может тренировать другую команду в разные seasons, поэтому мне нужно взять тренера, у которого есть время season.name значение 2017/2018, но дата start имеет формат datetime, такой как: 2017-01-01

Как я могу справиться с этой ситуацией?

Пример данных

тренер:

id | name | last_name
 1   foo      test

coach_career:

coach_id | team_id | start       | end
   1         95       2017-01-01   NULL

competition_seasons

id | name | 
1    2017/2018
  • 0
    Образцы данных и желаемые результаты действительно помогут.
  • 0
    @GordonLinoff проверь мое обновление
Показать ещё 4 комментария
Теги:
pdo

3 ответа

0
Лучший ответ

Извините, мой ответ был для SQL Server. Вот исправленная версия:

create table coach(id integer, name char(100));
insert into coach(id, name) values(1, 'Jack'), (2, 'Peter');

create table coach_career (coach_id integer, season_id integer, start date, end date);
insert into coach_career values (1, 95, '20170101', null), (2, 95, '20010101', null);

create table competition_seasons (id integer, name char(100));
insert into competition_seasons values (95, '2017/2018');

SELECT coach.*
FROM coach_career cc
LEFT JOIN coach ON coach.id = cc.coach_id
LEFT JOIN competition_seasons s ON s.id = cc.season_id
WHERE cc.season_id = 95 
      AND '2017/2018' like concat('%', cast(extract(year from cc.start) as char(100)), '%');
  • 0
    Спасибо за ответ, к сожалению, ваш запрос возвращает пустой результат ...
  • 0
    Странно, я протестировал его на paiza.io/projects/SdtzcJ0SoUfg1QS7k3I8QQ?language=mysql и он возвращает Jack
1

Вы можете использовать ключевое слово BETWEEN.

$query = "SELECT coach.*
      FROM coach_career coach_cr
      LEFT JOIN coach coach ON coach.id = coach_cr.coach_id
      LEFT JOIN competition_seasons s ON s.id = :season_id
      WHERE coach_cr.team_id = 95 AND 'start' BETWEEN '2017-01-01' and '2018-12-31'";
  • 0
    значение s.name равно 2017/2018% как я написал в запросе, поэтому вместо 2017/2018% считают, что это s.name, я не могу использовать между ..
  • 0
    Не могли бы вы использовать: `WHERE coach_cr.team_id = 95 AND (s.name как '% 2017%' ИЛИ s.name как '% 2018%')`
Показать ещё 1 комментарий
0

Попробуй это

$query = "SELECT coach.*
    FROM coach_career coach_cr
    LEFT JOIN coach coach 
        ON coach.id = coach_cr.coach_id
    LEFT JOIN competition_seasons s
        ON s.id = :season_id
    WHERE coach_cr.team_id = 95 
        AND 'start' LIKE '%2017%' 
        OR LIKE '%2018%'";
  • 0
    Я не могу использовать 2017, потому что я присоединяюсь к s.name, мой был примером значения ..

Ещё вопросы

Сообщество Overcoder
Наверх
Меню