![]()  | 
		
Задавайте вопросы, мы ответим
Вы не зашли.
Скажите возможно ли хранить имена таблиц в базе и как с ними работать внутри БД. 
Т.е. возможноли  сделать вот так...
select id from (select p1 from test1 where p2=100); \\ p1- varchar. 
На что мне выдаёт ошибку 42000. Как то обойти это можно не выходя за переделы БД? И будет ли это "красиво"?
Отредактированно demiurg (12.10.2011 21:45:17)
Неактивен

Неактивен
Нет. Не так. Я хочу хранить названия таблиц в другой таблице. Найти название таблицы через select и подставить его в другой select. Чтобы не нужно было на приложении , работающем с БД забирать переменную и формировать запрос из приложения. Т.е. значение столбца в какойто строчке передать как название таблицы ,в которой ведётся выборка,в запрос. А процедуры в этом плане мне ничего не дают.
Неактивен

Найти название таблицы через select и подставить его в другой select.
Без использования PREPARE STATEMENT это невозможно. А как использовать, написано в той теме, ссылку на которую дал vasya.
Неактивен
mysql> set @var='select p1 from test1 WHERE p2=100';
Query OK, 0 rows affected (0.00 sec)
mysql> PREPARE zx FROM @var;
Query OK, 0 rows affected (0.00 sec)
Statement prepared
mysql> EXECUTE zx;
+----------+
| p1       |
+----------+
| device10 |
+----------+
1 row in set (0.00 sec)
Выводит. А что дальше то. Как теперь вывести данные из таблицы с названием  device10 ? Там на этот счёт ничего не написано...
Неактивен

Неактивен

demiurg написал:
Выводит. А что дальше то. Как теперь вывести данные из таблицы с названием device10 ? Там на этот счёт ничего не написано...
А что делает пример в конце первого сообщения темы по ссылке??
Неактивен
оо спасибо. Заработало. 
А ещё столнулся с непонятками в процедурах 
ввожу
CREATE PROCEDURE my_proc(p1p int(255))
BEGIN
set @var1=CONCAT('select p1 from test1 WHERE p2=',p1p,' INTO @tbl');
PREPARE zx FROM @var1;
EXECUTE zx;
SET @var2=CONCAT('select * FROM ', @tbl);
PREPARE zy FROM @var2;
EXECUTE zy;
END;
А клиент  воспринимае это не как единый код а как набор строчек... И стопорится на 3 строке. 
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 3
************
ДА нужно просто работать с множеством таблиц и записывать в таблицу,  соответствующую конкретным значениям логина и  пароля. 
Это получается такие манипуляции нужно проводить для каждого подключения или можно создать глобально такую процедуру?
Отредактированно demiurg (13.10.2011 01:05:05)
Неактивен

Используйте delimiter$$
далее текст создания процедуры
$$
P.S. В вашем случае можно обойтись одним подготовленным выражением, см пост №7
Неактивен
vasya написал:
Используйте delimiter$$
далее текст создания процедуры
$$
P.S. В вашем случае можно обойтись одним подготовленным выражением, см пост №7
Не помогает 
ввожу:
delimiter$$ 
CREATE PROCEDURE my_proc(p1p int(255))
BEGIN
SELECT p1 from test1 WHERE p2=p1p INTO @tbl;
SET @var2=CONCAT('select * FROM ', @tbl);
PREPARE zy FROM @var2;
EXECUTE zy;
END;
$$
даёт:
mysql> delimiter$$
    -> CREATE PROCEDURE my_proc(p1p int(255))
    -> BEGIN
    -> SELECT p1 from test1 WHERE p2=p1p INTO @tbl;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'delimiter$$ CREATE PROCEDURE my_proc(p1p int(255))
BEGIN
SELECT p1 from test1 WH' at line 1
Отредактированно demiurg (13.10.2011 01:20:19)
Неактивен

Странно, а какая у вас версия mysql?
Неактивен
mysql-5.5.11-win32
работаю через mysql command line client
Отредактированно demiurg (13.10.2011 01:44:00)
Неактивен

Ага, сообразил. После delimiter должен быть пробел, т.е.
delimiter $$
И ещё, что значит int(255) ?
Неактивен
vasya написал:
Ага, сообразил. После delimiter должен быть пробел, т.е.
delimiter $$
И ещё, что значит int(255) ?
Оооо, заработало. Спасибо. 
Да я создавал таблицу так. эксперименты проводил 
 Максимальны размер вывода вроде бы.. 
Field | Type           | Null | Key | Default | Extra
------+----------------+------+-----+---------+-------
p1    | varchar(100) | YES  |     | NULL    |
p2    | int(255)       | YES  |     | NULL    |
Отредактированно demiurg (13.10.2011 02:07:17)
Неактивен

255-значное число ?
Неактивен
Эксперименты проводил )))) А таблицу взял как тестовую. 
Кстати а не подскажете как сделать переменную wait_timeout  постоянной. Чтобы не приходилось её задавать при каждом подключении. Делаю так set timeout=172800; Но при перезапуске подключения она опятьстановиться 28800.
Неактивен

Задать в конфиге (my.ini или my.cnf)
http://dev.mysql.com/doc/refman/5.0/en/ … it_timeout
Неактивен