За последние 24 часа нас посетили 22195 программистов и 1063 робота. Сейчас ищут 704 программиста ...

Два действия в запросе

Тема в разделе "PHP и базы данных", создана пользователем AlNick, 9 ноя 2018.

  1. AlNick

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

    С нами с:
    19 авг 2017
    Сообщения:
    64
    Симпатии:
    3
    Есть таблица с городами. Для каждого города указан регион. Зная название города, нужно получить все города из его региона. За два запроса это легко сделать. А возможно как-нибудь сделать одним запросом? Функция выполняется часто и уменьшить число запросов будет полезно
     
  2. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    Вложенные запросы, присоединения, разнесенные по времени и функциям запросы (если есть имя города, то часто есть и id его региона – просто нужно вытягивать всю инфу до крупицы из «побочных» запросов, чтобы не тянуть из базы одно и то же по несколько раз).
     
  3. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.199
    Симпатии:
    184
    структуру таблицы в студию
     
  4. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    Структура точно не правильная но если извращаться то можно и так
    select * from cities where city=(select users.city from users where id=1 limit 1) limit 10
     
    AlNick нравится это.
  5. AlNick

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

    С нами с:
    19 авг 2017
    Сообщения:
    64
    Симпатии:
    3
    Задача немного изменилась. Нужно получить города зная регион. Сложность в том, что в таблице городов указаны id регионов, а у скрипта есть название региона. Я ипользовал принцип, предложенный nospiou и всё получилось:)
    Запрос написал такой:
    SELECT name FROM city WHERE region=(SELECT id FROM regions WHERE name='$name')
     
  6. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.591
    Симпатии:
    360
    @AlNick, сравни с вариантом:
    Код (Text):
    1. SELECT t1.`name` FROM city as t1 join regions as t2 on t2.id = t1.region and t2.`name`='$name'
    И вместо прямой подстановки переменной в запрос пора уже использовать, например, подготовленные запросы (prepared statements)
    --- Добавлено ---
    (explain на оба... варианта запросов)