За последние 24 часа нас посетили 34293 программиста и 1742 робота. Сейчас ищут 949 программистов ...

получение имени таблицы из запроса

Тема в разделе "MySQL", создана пользователем freeneutron, 7 мар 2012.

  1. freeneutron

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

    С нами с:
    11 июн 2009
    Сообщения:
    226
    Симпатии:
    3
    Подскажите, пожалуйста, как правильно составить такой запрос:
    Код (Text):
    1. select * from (select 'city')
    суть, которого заключается в том, что имя таблицы заранее не известно и должно формироваться в результате выполнения вложенного запроса?
    Может можно написать как-то так:
    Код (Text):
    1. X = select 'city'; select * from X
    ?
    Главное, что бы оба запроса проходили в течении одного обращения к базе
     
  2. FalkoN

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

    С нами с:
    1 апр 2011
    Сообщения:
    184
    Симпатии:
    0
    Адрес:
    Екатеринбург
    А чем плох вариант одним запросом узнать имя таблицы, вторым - обратиться к этой таблице?
     
  3. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    я может туп, но как сделать запрос не зная таблицы?
     
  4. AndreJM

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

    С нами с:
    25 янв 2012
    Сообщения:
    522
    Симпатии:
    0
    Код (Text):
    1.  
    2. SET @tablename = (SELECT "city");
    3. SET @sql = CONCAT( 'select * from  ', @tablename);
    4. SELECT @sql;
    5. PREPARE bleatb_izvrat FROM @sql;
    6. EXECUTE bleatb_izvrat;
    Всё это одним запросом
     
  5. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    можно подробности про организацию базы, раз вобще такой вопрос возник?
     
  6. freeneutron

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

    С нами с:
    11 июн 2009
    Сообщения:
    226
    Симпатии:
    3
    Отвечаю на вопрос, зачем.
    Это попытка получить весь необходимый контент по произвольному значению REQUEST_URI за одно обращение к базе.
    Если REQUEST_URI содержит имя таблицы и id записи, то проблем нет, берем имя таблицы и id записи и получаем контент. Но если REQUEST_URI состоит из произвольной фразы (ЧПУ), то надо сперва по этой фразе определить имя таблицы и id записи, и только потом можно обращаться за контентом. Если имя таблицы и id записи и соответствующий им REQUEST_URI хранятся в таблице, то получается два запроса и следовательно, лишние временные затраты. Для того, что бы сократить временные затраты, я и ищу способ выполнить данную операцию за одно обращение к базе. Пока что я использую кэширование.
     
  7. AndreJM

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

    С нами с:
    25 янв 2012
    Сообщения:
    522
    Симпатии:
    0
    мну выше написал как сделать.
     
  8. freeneutron

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

    С нами с:
    11 июн 2009
    Сообщения:
    226
    Симпатии:
    3
    Я видел. В будущем обязательно воспользуюсь этим примером. Спасибо. Просто сделал кэширование и забыл. Даже не сразу вспомнил, зачем такой вопрос задавал ))