SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 13.09.2011 00:28:29

animegirl
Активист
Зарегистрирован: 28.07.2011
Сообщений: 288

Получить последнею таблицу в списке

В ДБ идут таблицы, сколько таблиц не известно, но надо взять последнею, команды ордер на SHOW TABLES  не работают, прав на выдачу из системных таблиц нету. Единственный вариант, что мне пришёл в голову:

$result = mysql_db_query('user_id_db',"SHOW TABLES",$mysql);
while($row = mysql_fetch_row($result))
    {
    $temp = $row[0];
    }
$neededtable = $temp;


Интересно, а есть более правильный вариант?


Скажи миру - НЯ!

Неактивен

 

#2 13.09.2011 01:26:14

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Получить последнею таблицу в списке

Вообще такие вещи из information_schema нужно тянуть...
Что-то вроде

USE information_schema;

SELECT `TABLE_NAME` FROM `TABLES` WHERE `TABLE_SCHEMA` = 'ИМЯ_НУЖНОЙ_БД' ORDER BY `CREATE_TIME` DESC LIMIT 1;


Если нет доступа к information_schema... посмотрите время создания файлов в каталоге базы smile.
И поделитесь пожалуйста, почему Вы считаете, что SHOW TABLES выдаёт таблицы в порядке создания?


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#3 13.09.2011 01:32:14

animegirl
Активист
Зарегистрирован: 28.07.2011
Сообщений: 288

Re: Получить последнею таблицу в списке

Я создаю таблицы нумерованные. В системные таблицы доступа нету. Только запросы обычного юзера доступны.


Скажи миру - НЯ!

Неактивен

 

#4 13.09.2011 01:36:26

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Получить последнею таблицу в списке

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

Если у таблиц одинаковые имена, то можно поиграть с like и substr при сортировке - то есть откусить имя таблицы, привести строку к целому числу и отсортировать по убыванию.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#5 13.09.2011 01:43:03

animegirl
Активист
Зарегистрирован: 28.07.2011
Сообщений: 288

Re: Получить последнею таблицу в списке

Сохранить где-то, не думаю, что надёжно. Вообще дело обстоит так, в таблицах есть поле, которое накручивается по auto incriment, когда данное число переваливает за отметку в 999.999, создастся вторая таблица с именем 1 (первая была 0), и начальным инкрименентом в 1.000.000 . Вот и изходя из этих раскладов, мне надо выдёргивать актуально последнию таблицу, при создание запроса на добавку данных.


Скажи миру - НЯ!

Неактивен

 

#6 13.09.2011 01:46:29

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Получить последнею таблицу в списке

Не очень понимаю в чем ненадежность сохранения нового номера при создании очередной таблицы smile. Впрочем даже если - вариант с like/substr Вам подошёл?


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#7 13.09.2011 10:43:54

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Получить последнею таблицу в списке

Я еще от себя добавлю.
1. ДБ — это даза банных. А по-русски пишут: «БД» wink
2. Преждевременная оптимизация — корень зла;
3. Вы пытаетесь искусственно сделать партиционирование. Может быть,
использовать уже встроенный в MySQL механизм?
4. INFORMATION_SCHEMA — не честная база, у Вас есть доступ оттуда
читать.

Неактивен

 

#8 13.09.2011 21:03:08

animegirl
Активист
Зарегистрирован: 28.07.2011
Сообщений: 288

Re: Получить последнею таблицу в списке

deadka,
Не понимаю, можно примером?

paulus,
1. Извините, привычка, DB - DataBase
2. Верю, но выполняю задание, не больше не меньше
3. Насколько я понимаю встроенный механизм, он разделяет файлы, а мне надо разделить по меткам, на сервере где идут запросы, все таблицы FEDERATED, где будут их части в будущем, сейчас не могу даже предположить.
4. Ну сейчас доступ есть, так как сижу на локальном компе под рутом, а на хостинге этого доступа нету.


Скажи миру - НЯ!

Неактивен

 

#9 13.09.2011 21:17:59

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Получить последнею таблицу в списке

К сожалению, синтаксис show tables не позволяет сортировать результат, так что без обращения к information_schema трюк с like/substr не проходит. точнее с like все нормально -

show tables like 'tab_%'
, а вот отсортировать результат не получается.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#10 13.09.2011 21:19:55

animegirl
Активист
Зарегистрирован: 28.07.2011
Сообщений: 288

Re: Получить последнею таблицу в списке

ну я вроде как тоже самое в начале писала


Скажи миру - НЯ!

Неактивен

 

#11 13.09.2011 21:26:25

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Получить последнею таблицу в списке

Да, почти то же самое. Только так оно, увы, не сработает.

Вот допустим есть таблицы

tab_1
tab_2
tab_3
tab_4
tab_5
tab_6
tab_7
tab_8
tab_9
tab_10
tab_11
tab_12
tab_20
tab_21

mysql> show tables like 'tab_%';
+---------------------------+
| Tables_in_sqlinfo (tab_%) |
+---------------------------+
| tab_1                     |
| tab_10                    |
| tab_11                    |
| tab_12                    |
| tab_2                     |
| tab_20                    |
| tab_21                    |
| tab_3                     |
| tab_4                     |
| tab_5                     |
| tab_6                     |
| tab_7                     |
| tab_8                     |
| tab_9                     |
+---------------------------+
14 rows in set (0.00 sec)

Как видите, последней в списке будет табличка tab_9, а нужно, чтобы была tab_21.

Модифицируйте свой php-код так, чтобы каждый раз при получении названия очередной таблицы из списка "откусывался" ее номер и он сравнивался с текущим максимальным номером - почти задача на поиск максимального элемента. Тем самым к концу прохода Вы получите искомую таблицу.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#12 13.09.2011 22:00:16

animegirl
Активист
Зарегистрирован: 28.07.2011
Сообщений: 288

Re: Получить последнею таблицу в списке

А теперь убери буквы из имён wink


Скажи миру - НЯ!

Неактивен

 

#13 13.09.2011 22:05:02

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Получить последнею таблицу в списке

substr СОРД wink


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#14 13.09.2011 23:34:25

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Получить последнею таблицу в списке

А какая версия MySQL на хостинге, если не секрет? У меня ощущение, что
у Вас там MySQL по крайней мере пятилетней выдержки. Даже сильно огра-
ниченные в правах пользователи могут читать из базы INFORMATION_SCHEMA.
Нужно только поверить в свои силы и не полениться попробовать:

Код:

mysql> SHOW GRANTS;
+---------------------------------------------------+
| Grants for lucky@localhost                        |
+---------------------------------------------------+
| GRANT USAGE ON *.* TO 'lucky'@'localhost'         |
| GRANT SELECT ON `test`.`a` TO 'lucky'@'localhost' |
+---------------------------------------------------+
2 rows in set (0.00 sec)

mysql> SHOW TABLES;
+----------------+
| Tables_in_test |
+----------------+
| a              |
+----------------+
1 row in set (0.00 sec)

mysql> SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test';
+------------+
| TABLE_NAME |
+------------+
| a          |
+------------+
1 row in set (0.00 sec)

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson