Код: Выделить всё
SELECT * FROM CONCAT('Hosting','Orders') WHERE 1
в oracle - прокатывает =((
Модератор: terminus
Код: Выделить всё
SELECT * FROM CONCAT('Hosting','Orders') WHERE 1
Код: Выделить всё
mysql> set @query=concat("show tables from ", database(), ";");
Query OK, 0 rows affected (0.00 sec)
mysql> prepare stm from @query;
Query OK, 0 rows affected (0.00 sec)
Statement prepared
mysql> execute stm;
+---------------------------+
| Tables_in_mysql |
+---------------------------+
| columns_priv |
| db |
| event |
| func |
| general_log |
| help_category |
| help_keyword |
| help_relation |
| help_topic |
| host |
| ndb_binlog_index |
| plugin |
| proc |
| procs_priv |
| servers |
| slow_log |
| tables_priv |
| time_zone |
| time_zone_leap_second |
| time_zone_name |
| time_zone_transition |
| time_zone_transition_type |
| user |
+---------------------------+
23 rows in set (0.00 sec)
mysql>
слишком банальноAlex Keda писал(а):а почему не канает такой запрос?
Код: Выделить всё
set @s = 'select user from ?;';
prepare stmt from @s;
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 1
Код: Выделить всё
SELECT * FROM (SELECT CONCAT('Hosting','Orders')) AS t WHERE 1
а проверить не?Gloft писал(а):Вроде так должно работать.
Код: Выделить всё
mysql> select * from (select "help_topic") as t where 1;
+------------+
| help_topic |
+------------+
| help_topic |
+------------+
1 row in set (0.00 sec)
-))) prepare несколько отличается от printf логической нагрузкойFiL писал(а):как параметр к POW (или другой функции) так можно ? поставить
Код: Выделить всё
mysql> SELECT * FROM (SELECT CONCAT('Hosting','Orders')) AS t WHERE 1;
+----------------------------+
| CONCAT('Hosting','Orders') |
+----------------------------+
| HostingOrders |
+----------------------------+
1 row in set (0.00 sec)
mysql>
Код: Выделить всё
SELECT `ID`,`UserID`,`OrderDate`,`StatusID`,`StatusDate`,
(SELECT `Services`.`Code` FROM `Services` WHERE `OrdersOwners`.`ServiceID` = `Services`.`ID`) AS `OrderTypeCode`, ID as `Number`,
(SELECT `Services`.`Item` FROM `Services` WHERE `OrdersOwners`.`ServiceID` = `Services`.`ID`) as `OrderType`,
(SELECT `Email` FROM `Users` WHERE `UserID` = `Users`.`ID`) as `Owner`,StatusID as `Status`,UNIX_TIMESTAMP() - `StatusDate` as `StatusOver`
FROM `OrdersOwners` WHERE (`StatusID` IS NOT NULL AND `OrderDate` > BEGIN_WEEK()) GROUP BY `ID` ORDER BY `OrderDate` DESC LIMIT 0, 20
Код: Выделить всё
(SELECT `Services`.`Item` FROM `Services` WHERE `OrdersOwners`.`ServiceID` = `Services`.`ID`) as `OrderType`,
select * from (...) - это выборка из результатов подзапроса, это не то, что требуетсяAlex Keda писал(а):а должно было выдать 5k записей из таблицы)
тогда можно использовать хранимую процедуруAlex Keda писал(а):мне надо одним запросом сделать.
я ограничен строкой, типа вот этой:Gamerman писал(а):Сформировать нужную строку и отправить строку-запрос. Или это нужно в мускулевских скриптах замутить?
Код: Выделить всё
(SELECT `Services`.`Item` FROM `Services` WHERE `OrdersOwners`.`ServiceID` = `Services`.`ID`) as `OrderType`
Код: Выделить всё
<!-- не работает в MySQL. А вот в Oracle - такой фокус прокатывает
<ListElement>(SELECT ID FROM CONCAT((SELECT `Services`.`Code` FROM `Services` WHERE `OrdersOwners`.`ServiceID` = `Services`.`ID`),'Orders'),`tbl` WHERE `tbl`.`OrderID` = `OrdersOwners`.`ID`) AS ServiceOrderID</ListElement> -->
Код: Выделить всё
FROM CONCAT
вызов процедуры и есть прямое решениеAlex Keda писал(а):хотелось прямое решение