Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа создание БД mysql, php, не могу создать БД 
:(
    Опции темы
Norfonzor
Дата 8.12.2010, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 17.10.2008

Репутация: нет
Всего: нет



Здавствуйте!
За ранее извиняюсь за ламерский вопрос но не могу создать БД и не могу понять как работает php с Mysql

Данные:
Один server содержит БД теста.
Несколько пользователей, проходят тестирования, для каждого пользователя создается отдельная БД_N тестирования.
установлен Denver


Вопрос:
1) как создать БД тестирования на сервере, и ручками потом ее редактировать.
2) как создать БД_N для каждого пользователя? БД они должны иметь разные имена? 
3) все БД хранить на сервере??
4) а где они хранятся? Z:\usr\local\mysql-5.1\data ?
4) каждый пользователь должен работать одновременно с 2мя БД. Рационально ли это, или стоит скопировать (1раз) из одной  БД в другую необходимую информацию(часть двух таблиц) и работать с одной БД?

Предположения:
Код

<?php

$dblocation = "localhost";
$dbuser = "root";
$dbpasswd ="";
$dbname = "baz1";

$dbcnx = @mysql_connect($dblocation,$dbuser,$dbpasswd);
    if (!$dbcnx) // Если дескриптор равен 0 соединение не установлено
    {      echo("<P>В настоящий момент сервер базы данных не доступен, поэтому
               корректное отображение страницы невозможно.</P>");
      exit();
    }

if (!@mysql_query('CREATE DATA BASE("'.$dbname.'")'))
{
echo("создана БД");
} else {echo("БД не создана");}


// Код соединения с базой данных
    if (!@mysql_select_db($dbname, $dbcnx))
    {
      echo( "<P>БД ".$dbname." не найдена</P>" );
      exit();
    }
?>

в ответе я получаю: "создана БД baz1 не найдена"
Помогите пожалуйста разобраться!


Это сообщение отредактировал(а) Norfonzor - 8.12.2010, 13:14
PM MAIL   Вверх
triclosan
Дата 8.12.2010, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 515
Регистрация: 18.8.2006

Репутация: 1
Всего: 12



Код

CREATE DATABASE db_name


Добавлено через 3 минуты и 4 секунды
Цитата(Norfonzor @  8.12.2010,  12:25 Найти цитируемый пост)
if (!@mysql_query('CREATE DATA BASE("'.$dbname.'")'))

вы пишете - "если не создана БД"
PM MAIL   Вверх
Norfonzor
Дата 8.12.2010, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 17.10.2008

Репутация: нет
Всего: нет



triclosan, спасибо с правильностью написания разобрался, БД создалась, появилась папка  Z:\usr\local\mysql-5.1\data\baz1
а на счет др вопросов?


Это сообщение отредактировал(а) Norfonzor - 8.12.2010, 13:09
PM MAIL   Вверх
triclosan
Дата 8.12.2010, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 515
Регистрация: 18.8.2006

Репутация: 1
Всего: 12



Тестирование какого рода, нагрузочное? Тогда почему на Денвере, а не на продакшене? 


Цитата(Norfonzor @  8.12.2010,  12:25 Найти цитируемый пост)
БД они должны иметь разные имена? 

ага всегда.


Цитата(Norfonzor @  8.12.2010,  12:25 Найти цитируемый пост)
3) все БД хранить на сервере??

бд хранятся в хранилище вашего mysql-сервера.


Цитата(Norfonzor @  8.12.2010,  12:25 Найти цитируемый пост)
Рационально ли это, или стоит скопировать (1раз) 

Я не думаю, что это может сильно сказаться на нагрузке. Имхо лучше исходить из логичности структуры данных.
PM MAIL   Вверх
bars80080
Дата 8.12.2010, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 9
Всего: 315



странно, что ещё никто не спросил: а зачем более одной базы данных?
PM MAIL WWW   Вверх
Norfonzor
Дата 9.12.2010, 09:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 17.10.2008

Репутация: нет
Всего: нет



bars80080, 
Схема:
SERVER:
1) Хранит БазыДанных тестирования, для каждой темы-своя БД (DATA-test1, DATA-test2...) содержит вопросов(MAX_questions)
user posted image
2) Хранит БД пользователей
user posted image

3) После регистрации пользователя создается БД TESTING_+[TAB_users.id]
(По одной для каждого пользователя)

TESTING_N содержит таблицы:
user posted image

КЛИЕНТ:

Алгоритм:
1) Регистрация/авторизация пользователя
а) Создание/открытие БД TESTING_+[TAB_users.id]- хранит информацию о пройденных тестах и результатах тестирования
2) Выбор темы теста для тестирования, выбор кол-во вопросов (1..MAX_questions)
3) Подготовка к тестированию   
        а) Генерация (random) номеров вопросов и копирование их 
из DATA_TEST_1  в TESTING_N,
таблицы: TAB_testing_N, TAB_vopros, TAB_Responders
    б) заполнение TAB_data
    в) Переход к 1ой странице теста
4) Тестирование: работа с БД TESTING_N
5)Завершение тестирования:
    а) работа с БД TESTING_N, проверка правильных ответов, заполнение TAB_data
    б) вывод результатов тестирования


PM MAIL   Вверх
bars80080
Дата 9.12.2010, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 9
Всего: 315



вкратце уже было рассказано в первом посте, вопрос остаётся прежним: зачем более одной базы данных?
почему нельзя всё уместить в одной?
почему нельзя регистрировать всех пользователей в одной таблице одной базы?
почему нельзя вопросы тестирования для всех разместить в одной таблице?
почему нельзя ответы на все вопросы разместить в одной таблице?

зачем больше одной базы?
PM MAIL WWW   Вверх
Norfonzor
Дата 10.12.2010, 08:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 17.10.2008

Репутация: нет
Всего: нет



bars80080, 
Цитата

почему нельзя всё уместить в одной?
почему нельзя регистрировать всех пользователей в одной таблице одной базы?
почему нельзя вопросы тестирования для всех разместить в одной таблице?
почему нельзя ответы на все вопросы разместить в одной таблице?

зачем больше одной базы? 

к примеру необходимо добавить на 2ой компьютер, 1 из 10 имеющихся тестов с 1го пк. При добавлении необходимо будет сохранить имеющиеся тесты на 2м пк. 
если все будет в 1ой БД то нельзя будет выделить 1тест и скопировать его на 2ю машину, через проводник Windows. Да и каша может получиться в таблице содержащей кучу тестов. 10тестов по 2000вопрососов, очень уж большая БД получится.

мм а при частом переключении между БД будет значительное замедление системы? Или почему не стоит работать с несколькими БД с технической стороны?
PM MAIL   Вверх
bars80080
Дата 10.12.2010, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 9
Всего: 315



Цитата(Norfonzor @  10.12.2010,  07:08 Найти цитируемый пост)
10тестов по 2000вопрососов, очень уж большая БД получится.

у меня логи в тестовом режиме крутятся больше. а это без пользователей и в наиболее простом варианте мускле


Цитата(Norfonzor @  10.12.2010,  07:08 Найти цитируемый пост)
к примеру необходимо добавить на 2ой компьютер, 1 из 10 имеющихся тестов с 1го пк. При добавлении необходимо будет сохранить имеющиеся тесты на 2м пк. 

вот эту вещь поподробнее. зачем что-то копировать с одного ПК на другой? они в сеть включены?

как вообще выглядит задача работы с тестами? 
я так понимаю - есть класс с несколькими рабочими местами, приходят пользователи, садятся куда-нибудь и выполняют некоторый тест(ы)?
PM MAIL WWW   Вверх
Norfonzor
Дата 11.12.2010, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 17.10.2008

Репутация: нет
Всего: нет



Цитата

я так понимаю - есть класс с несколькими рабочими местами, приходят пользователи, садятся куда-нибудь и выполняют некоторый тест(ы)?

да, именно так, только таких классов несколько. Может быть несколько учреждений будут проходить тестирование используя это ПО.

Цитата

вот эту вещь поподробнее. зачем что-то копировать с одного ПК на другой? они в сеть включены?


компьютеры будут в сети, копировать с 1го сервера теста на другой. Требуется мобильность при перемещении тестов. Тесты будут набирать несколько человек, находящиеся может и не в сети, и территориально не в одном месте.
PM MAIL   Вверх
bars80080
Дата 11.12.2010, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 9
Всего: 315



Цитата(Norfonzor @  11.12.2010,  10:16 Найти цитируемый пост)
да, именно так, только таких классов несколько. Может быть несколько учреждений будут проходить тестирование используя это ПО.

если все компьютеры подключены к сети, то максимальная мобильность и максимальный территориальный обхват достигается при базировании всех данных на одном сервере. связь через интернет или удалённый доступ (по сути одно и то же). в таком случае отпадает проблема синхронизации, проблема переноса данных, проблема доставки результатов. система безопасности и система достоверности упрощаются до минимума. особенным плюс является то, что для вэба на ПК уже всё установлено - это браузер, единственная требующаяся программа.
в этом суть вэба: любые ПК - всего лишь терминалы, потому в него и переносится всё больше и больше систем. в частности у нас уже вся отчётность между агентами продаж и перепродаж разных уровней идёт сплошняком через вэб. даже бухгалетрию постепенно туда переводят.

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

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

Добавлено через 3 минуты и 15 секунд
п.с. 
я почему настоятельно акцентирую внимание на этом вопросе?
я не знаю, может вы работаете в бюджетной сфере, где денег не считают, но что касается озвученной задачи - делать систему не через вэб - выкидывание порядка 95% средств в воздух. любому частному предпринимателю я это легко докажу.
PM MAIL WWW   Вверх
Norfonzor
Дата 23.12.2010, 09:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 17.10.2008

Репутация: нет
Всего: нет



Господа подскажите пожалуйста как скопировать часть таблицы(по id) из 1ой БД в пустую таблицу 2ой БД?

имеется массив $id_mas, содержит номера id. Необходимо скопировать строки, id которых совпадают с массивом id_mas.
придумал 2 схемки:

1ая:
Код

//выбирает БД1
mysql_select_db($db1, $link);  

//сохраняем в RES все записи таблицы 1
$res = mysql_query("SELECT * FROM TAB1_1");
 
//выбирает БД2
mysql_select_db($db2, $link);

//вставляем записи из RES в таблицу TEMP 2ой БД
while($row=mysql_fetch_array($res)) 
{
$id=$row['id'];
$st1=$row['stolbec1'];
$st2=$row['stolbec2'];
mysql_query("INSERT INTO TEMP (id,stolbec1,stolbec2) VALUES('".$id."','".$st1."','".$st1."')")or die(mysql_error());
}

//копируем из TEMP в TAB2 те записи, id которых совпадают с id из массива $id_mas
for($i==1;$i<=count($id_mas);$i++)
{
$res2 = mysql_query("SELECT * FROM TEMP WHERE id='.$id_mas[$i].'");
$st1=$row['stolbec1'];
$st2=$row['stolbec2'];
mysql_query("INSERT INTO TAB2 (id,stolbec1,stolbec2) VALUES('".$i."','".$st1."','".$st1."')")or die(mysql_error());

}



2ая схема

Код


for($i==1;$i<=count($id_mas);$i++)
{
//выбирает БД1
mysql_select_db($db1, $link);  

//выбираем строку id которой совпадает с id из массива $id_mas
$res = mysql_query("SELECT * FROM TEMP WHERE id='.$id_mas[$i].'");
$st1=$row['stolbec1'];
$st2=$row['stolbec2'];

//выбирает БД2
mysql_select_db($db2, $link);

//вставляем строку в TAB2 2ой БД
mysql_query("INSERT INTO TAB2 (id,stolbec1,stolbec2) VALUES('".$i."','".$st1."','".$st1."')")or die(mysql_error());

}




Способы придумал сам, какой способ лучше использовать?
Или как можно быстрее и более изящно скопировать данные?
PM MAIL   Вверх
triclosan
Дата 23.12.2010, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 515
Регистрация: 18.8.2006

Репутация: 1
Всего: 12



№1 - плохо, вполне можно обойтись без временной таблицы, зачем она там не пойму.


если массив $id_mas небольшой 
Код

mysql_query("INSERT INTO DB2.TAB2 SELECT * FROM  DB1.TAB1_1 where id in (".implode(",", $id_mas).")")or die(mysql_error());


если записей много - идея та же, только в цикле пробежать по TAB1_1 и в нем же инсертить по одной записи в TAB2, используя полные пути к таблицам, без этого вашего mysql_select_db

Добавлено @ 11:30
линки подключения к бд одинаковые в вашем коде, это же на одном инстансе mysql все происходит, я верно понял?

Это сообщение отредактировал(а) triclosan - 23.12.2010, 12:55
PM MAIL   Вверх
Norfonzor
Дата 26.1.2011, 07:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 17.10.2008

Репутация: нет
Всего: нет



triclosan, да все будет работать под 1о Mqsql, на 1м сервере.

таким способом поступить?:
Код

for($i==1;$i<=count($id_mas);$i++)
{    
mysql_query("INSERT INTO DB2.TAB2 SELECT * FROM  DB1.TAB1_1 where id=".$id_mas[$i].")or die(mysql_error());
}


Это сообщение отредактировал(а) Norfonzor - 26.1.2011, 08:07
PM MAIL   Вверх
triclosan
Дата 26.1.2011, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 515
Регистрация: 18.8.2006

Репутация: 1
Всего: 12



можно, скажите только сколько нулей у числа count($id_mas), кстати его (подсчет числа) не вредно из условия вынести, у вас же массив во время выполнения не меняется?

Добавлено через 2 минуты и 44 секунды
Цитата(Norfonzor @  26.1.2011,  07:54 Найти цитируемый пост)
for($i==1;$i<=count($id_mas);$i++)


У вас массив с индекса 1 начинается ?

Если да похоже тут надо $i=1

Добавлено через 7 минут и 30 секунд
ну и $i<count($id_mas);
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0629 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.