Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Временные базы даных !
 
 автор: gwest   (09.04.2005 в 17:51)   письмо автору
 
 

Что такое временные базы даных?
1. Это база которая хранит данные определенное время, после чего их удаляет?
или
2. Это база которая существует определенное время?
Если есть дайте ссылочку где можно более подробно об этом почитать =)

   
 
 автор: cheops   (10.04.2005 в 00:42)   письмо автору
 
   для: gwest   (09.04.2005 в 17:51)
 

Здесь речь скорее идёт о временных таблицах - это таблицы, которые существуют в пределах одного сеанса, т.е. открыли сеанс работы с базой данных - создали таблицу, заполнили, поработали, закрыли сеанс - в момент закрытия сеанса - она уничтожается. Пример работы с данной таблицей вы можете обнаружить в теме по ссылке http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=278. Временная таблица видна только одному клиенту - тому, кто её создаёт, в отличии от таблиц, которые располагаются в оперативной памяти, тип MEMORY (HEAP).

PS Если вам не сложно создавайте темы посвященные базам данных в разделе форума MySQL http://www.softtime.ru/forum/index.php?id_forum=3

   
 
 автор: gwest   (11.04.2005 в 14:58)   письмо автору
 
   для: cheops   (10.04.2005 в 00:42)
 

Подскажите где можно накопать материал по этим втеменным таблицам, а то чета нечего найти немогу =(
Или напишите функции при помощи которых можно с таблицами работать(хотя бы самые основные).

   
 
 автор: cheops   (11.04.2005 в 22:48)   письмо автору
 
   для: gwest   (11.04.2005 в 14:58)
 

По ссылке http://www.softtime.ru/forum/read.php?id_forum=4&id_theme=278 приводится пример работы с такими таблицами, они ничем ни отличаются от обычных, только вместо оператора CREATE TABLE используется CREATE TEMPORARY TABLE, а так все запросы на выборку, удаление, вставку и т.д. точно такие же как для обычных таблиц.

   
 
 автор: gwest   (13.04.2005 в 13:51)   письмо автору
 
   для: cheops   (11.04.2005 в 22:48)
 

Почему-то не получается!
Пишет ошибку Table 'database.base2' doesn't exist
вот часть кода:

foreach($subject as $key => $value)
  {
   if($value>0)
    {
     $query="CREATE TEMPORARY TABLE  base2 SELECT name_sub, value";
         $open ="insert into time_korz values ('$key', '$value');";
    }
  }   
       if(mysql_query($open))
       {
        
       }
       else
       {
       echo"<a href='form1.php'>Вернуться</a><br>";
       echo "Ошибка ".mysql_error()."";
       exit();
       }

   
 
 автор: cheops   (13.04.2005 в 22:24)   письмо автору
 
   для: gwest   (13.04.2005 в 13:51)
 

У вас во вложенном запросе
CREATE TEMPORARY TABLE  base2 SELECT name_sub, value

не указано из какой таблицы выбирает данные оператор SELECT.

   
 
 автор: gwest   (14.04.2005 в 12:14)   письмо автору
 
   для: cheops   (13.04.2005 в 22:24)
 

Можно создать таблицу подобным примером?

 $query="CREATE TEMPORARY TABLE  base2 (name_sub text, value text)type=myisam ;";

или же данные должни выбираться из другой таблицы

   
 
 автор: cheops   (14.04.2005 в 23:29)   письмо автору
 
   для: gwest   (14.04.2005 в 12:14)
 

Нет, вполне можно создать и пустую таблицу, так как в вашем запросе.

   
 
 автор: gwest   (15.04.2005 в 18:04)   письмо автору
 
   для: cheops   (14.04.2005 в 23:29)
 

Видел в некоторых кодах, что при открытии сеанса писали

session_name('name');

Нужно ли в моем случае поступать темже образом?
Хм... И еще если в php.ini в строке session.auto_start поставить 1, можно будет не использовать в своем коде session_start =)

   
 
 автор: cheops   (15.04.2005 в 22:50)   письмо автору
 
   для: gwest   (15.04.2005 в 18:04)
 

Нет, сессии не связаны с базой данных MySQL они относятся к Web-серверу. Т.е. для работы с MySQL инициировать и работать с сессией не обязательно.

   
 
 автор: gwest   (16.04.2005 в 11:08)   письмо автору
 
   для: cheops   (15.04.2005 в 22:50)
 

Хм.. Возникает ошибка:
Я создаю временную таблицу и если код показа данных таблицы находится в той же форме, то все нормально создается. Если же этот код поместить в отдельный фаил, то появляется следующее: Ошибка Table 'base.base2' doesn't exist
То есть такой базы нет! Может я не так что то делаю?

   
 
 автор: cheops   (16.04.2005 в 12:02)   письмо автору
 
   для: gwest   (16.04.2005 в 11:08)
 

Дело в том, что таблица временная, и как только закрывается дескриптор соединения с базой данных (а это происходит в конце каждого PHP-файла) таблица автоматически уничтожается.

   
 
 автор: gwest   (18.04.2005 в 13:19)   письмо автору
 
   для: cheops   (16.04.2005 в 12:02)
 

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

   
 
 автор: cheops   (18.04.2005 в 13:35)   письмо автору
 
   для: gwest   (18.04.2005 в 13:19)
 

А нет вы зря каждый раз для каждого покупателя создаёте и уничтожаете таблицу - это слишком накладно. Обычно создают одну таблицу на всех и вводят поля для первичного ключа покупателя, поэтому когда необходимо извлечь товары для конретного покупателя достаточно указать WHERE id_user=1234, где 1234 - уникальный идентификатор покупателя (первичный ключ). Записи можно удалять только по требованию покупателя или при оформлении покупки, в этом случае можно добится эффекта как на Ozone - приходишь через пол года, а у тебя в корзине лежат не купленные пол года назад товары - хочешь выкидываешь, хочешь покупаешь...

   
 
 автор: gwest   (18.04.2005 в 16:07)   письмо автору
 
   для: cheops   (18.04.2005 в 13:35)
 

Возможно мой вопрос покажется глупым, но что-то не получается!
Вопервых хотелось бы узнать какие примерно должны быть столбцы?
Допустим есть две таблицы 1-заносятся товары, 2-информация о покупателе
1-таблица

create table table1(
id_subject int(6), \\порядковый номер товара
name_subject text, \\наименование
value text \\кол-во 
)type=myisam;

2-таблица

create table table2(
id_client int(6) not null auto_increment, \\порядковый номер (можно задать как первичный ключ) 
name text, \\имя
tel text, \\телефон и т.д
primery key (id_client)
)type=myisam;

В чем собственно вопрос:
Сначала человек работает с товаром (добовляет, редактирует корзину) и только потом оставляет свои данные.
Регистрации на сайте нет то есть каждый раз человек должен оставлять информяцию о себе.
Вопрос:
1) Куда должен записываться товар во время его добавления в корзину. Ведь если он будет записываться в общую таблицу тогда следует как-то товары разделить.

Я так думаю что когда человек заходит на сайт ему присваивается какое-то значение, допустим 1, второму 2 и т.д. Когда человек выбирает товар в 1-ю таблицу записывается название товара, количество и этот номер (следовательно нужно как то изменить таблицу), потом когда он оставляет свои данные то там тоже должно записываться это значение. А с выводом информации уже проще.
Дак вот именно как это сделать я и не знаю! (Есть предположение что надо использовать первичные и внешние клучи).
Еще раз извините за глупые вопросы =)

   
 
 автор: cheops   (19.04.2005 в 00:08)   письмо автору
 
   для: gwest   (18.04.2005 в 16:07)
 

Таблицу table1, которая я как понимаю предназначена для корзины, следует снабдить дополнительными полями
create table table1( 
id_subject int(6), \\порядковый номер товара 
name_subject text, \\наименование 
value text, \\кол-во 
sid text, // идентификатор сессии
id_client int // уникальный номер клиента
)type=myisam;

в sid следует помещать идентификатор текущей сессии - он уникален в пределах сервера, а в id_client - уникальные номера, зарегистрированных посетителей. Тогда отличить товары зарегистрированных посетителей можно по id_client, а не зарегистрированных (им в id_client следует помещать NULL или 0) по sid.

PS Часто корзину вообще не хранят в таблице MySQL, а полностью сохраняют в $_SESSION - недостаток: корзина разрушается при закрытии окна браузера.

   
 
 автор: gwest   (19.04.2005 в 15:30)   письмо автору
 
   для: cheops   (19.04.2005 в 00:08)
 

Спосибо!
Можно по подробнее что такое идентификатор сессии?
А id_client в моем случае не нужен (нет регистрации) =)

   
 
 автор: gwest   (19.04.2005 в 16:15)   письмо автору
 
   для: gwest   (19.04.2005 в 15:30)
 

Ага понял это функция session_id();
Хотелось бы узнать зачем нужна константа SID;

   
 
 автор: gwest   (19.04.2005 в 16:50)   письмо автору
 
   для: gwest   (19.04.2005 в 16:15)
 

Хм... Так получается что для каждого компа есть свой идентификатор сессии и если я зайду на сайт, допустим через месяц то номер не изменится?
А это случайно с куками не как не связано?

И еще как мне из таблицы вытащить те товары, которые принадлежат именно мне.

<?
session_id
();
session_start();
$sid=session_id();
$sub=mysql_query("select * from table1 where value>0 and sid=$sid")
?>

Так не канает и вообще SQL синтаксис дружит с переменными PHP?

   
 
 автор: cheops   (19.04.2005 в 21:43)   письмо автору
 
   для: gwest   (19.04.2005 в 16:50)
 

Хм... Так получается что для каждого компа есть свой
>идентификатор сессии и если я зайду на сайт, допустим через
>месяц то номер не изменится?
>А это случайно с куками не как не связано?
Нет не совсем так, идентификатор назначается каждый раз разный (именно поэтому нужна авторизация для зарегистрированных пользователей) и действует этот идентификатор только на одну сессию (пока посетитель не выключит браузер)

   
 
 автор: cheops   (19.04.2005 в 21:45)   письмо автору
 
   для: gwest   (19.04.2005 в 16:50)
 

>Так не канает и вообще SQL синтаксис дружит с переменными
>PHP?
Да, но следует помнить, что $sid - это строка и её следует заключать в одиночные кавычки
"select * from table1 where value>0 and sid='$sid'"

   
 
 автор: cheops   (19.04.2005 в 21:40)   письмо автору
 
   для: gwest   (19.04.2005 в 16:15)
 

>Ага понял это функция session_id();
>Хотелось бы узнать зачем нужна константа SID;
session_id() и SID возвращают одну и ту же величину.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования