Запрос для игры в города

Тема в разделе "Базы данных", создана пользователем Q_BASIC, 13 фев 2017.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Q_BASIC

    Q_BASIC

    Регистр.:
    30 ноя 2013
    Сообщения:
    446
    Симпатии:
    320
    Приветствую,

    Есть две таблицы:
    1. Города (mt_cities)
    2. Использованные города (mt_cities_played)

    Надо получить город, который еще не использовался и начинается с определенной буквы.

    Я сделал такой запрос:
    Код:
    SELECT mt_cities.id, mt_cities.name
    FROM mt_cities
    LEFT JOIN mt_cities_played
    ON mt_cities_played.city_id = mt_cities.id
    WHERE
        mt_cities.name LIKE "С%"
        AND
        mt_cities_played.user_id = 123
        AND
        mt_cities_played.city_id IS NULL
    И ничего не получаю. Что не так?

    Позже понял:


    Не так, похоже, то, что я указываю что записи в mt_cities_played быть не должно и одновременно у записи, которой нет, должно быть user_id = 123.

    Как тогда сделать запрос?

    Таблицы:

    Код:
    mt_cities:
    id | name
    1  | Самара
    2  | Саратов
    
    mt_cities_played:
    id | city_id | user_id
    1  |  1      | 123
     
    Последнее редактирование модератором: 23 фев 2017
  2. Nei

    Nei Nosce te ipsum

    Регистр.:
    5 сен 2009
    Сообщения:
    648
    Симпатии:
    513
    Так наверное
    PHP:
    SELECT mt_cities.idmt_cities.name
    FROM mt_cities
    LEFT JOIN mt_cities_played
    ON mt_cities_played
    .city_id != mt_cities.id
    WHERE
      mt_cities
    .name LIKE "С%"
      
    AND
      
    mt_cities_played.user_id 123
     
  3. dollar1981

    dollar1981

    Заблокирован
    Регистр.:
    17 май 2012
    Сообщения:
    183
    Симпатии:
    63
    Последнее редактирование модератором: 23 фев 2017
  4. fliuger

    fliuger Создатель

    Регистр.:
    24 янв 2017
    Сообщения:
    11
    Симпатии:
    4
    Код:
    select * from mt_cities where id not in (select city_id from mt_cities_played) and name like 'С%'
    
    ну или

    Код:
    select * from mt_cities where id not in (select city_id from mt_cities_played) and left(name, 1) = 'С'
     
    Последнее редактирование модератором: 30 мар 2017
  5. GowarD

    GowarD Писатель

    Регистр.:
    25 мар 2017
    Сообщения:
    6
    Симпатии:
    0
    Код:
    SELECT c.id, c.name
    FROM mt_cities_played p
    RIGHT JOIN mt_cities c
    ON ( p.city_id = c.id )
    WHERE c.name LIKE ( "С%" )
     
    Последнее редактирование модератором: 30 мар 2017
Статус темы:
Закрыта.