Один запрос MySQL для «подпрыгивающей» таблицы выбирает - PullRequest
0 голосов
/ 02 декабря 2009

Итак, ради простоты, у меня есть основная таблица, содержащая два поля: первое - это атрибут, а второе - значение атрибута. Если второе поле установлено для ссылки на значение в другой таблице, оно обозначается в скобках.

Пример:

                 MASTER_TABLE:
Attr_ID |  Attr_Val
--------+-----------
   1    | 23(table1)   --> 23rd value from `table1`
   2    | ...
   1    | 42           --> the number 42
   1    | 72(table2)   --> 72nd value from `table2`
   3    | ...
   1    | txt          --> string "txt"
   2    | ...
   4    | ...


                 TABLE 1:
 Val_Id |  Value
--------+-----------
   1    | some_content
   2    | ...
   .    | ...
   .    | ...
   .    | ...
  23    | some_content
   .    | ...

Можно ли выполнить одиночный запрос в SQL (без анализа результатов внутри приложения и запроса базы данных), который будет повторяться через master_table и для заданного <attr_id> получать только те атрибуты, которые ссылаются другие таблицы (, например, 23 (таблица1), 72 (таблица2), ... ), затем анализируют имена таблиц из круглых скобок ( например, таблица1, таблица2, ... ) выполнить запрос, чтобы получить ( 23-е, 72-е, ... ) значение ( например, some_content ) из этой ссылочной таблицы?

Вот что я сделал, и он анализирует Attr_Val для имени таблицы, но я не знаю, как присвоить его строке, а затем выполнить запрос с этой строкой.

PREPARE pstmt FROM 
    "SELECT * FROM information_schema.tables 
     WHERE TABLESCHEMA = '<my_db_name>' AND TABLE_NAME=?"; 

 SET @str_tablename = 
   (SELECT table.tablename FROM
       (SELECT @string:=(SELECT <string_column> FROM <table> WHERE ID=<attr_id>) as String,
            @loc1:=length(@string)-locate("(", reverse(@string))+2 AS from,
            @loc2:=length(@string)-locate(")", reverse(@string))+1-@loc1 AS to,
            substr(@string,@loc1, @loc2) AS tablename
       ) table
   );  <--this returns 1 rows which is OK

EXECUTE pstmt USING @str_tablename; <--this then returns 0 rows

Есть мысли?

1 Ответ

1 голос
/ 03 декабря 2009

Мне нравится чистота этого подхода, если его снять. Но я думаю, что вы создаете техническую бомбу. Кому нужно лечиться таким лекарством?

Никто никогда не говорил о веб-сайте "Чувак, их данные чисты!" Они дополняют то, что делается с данными. Я не рекомендую вам держать руки за спиной на этом. Я гарантирую, что ваши конкуренты нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...