DET
Гость
|
|
« : 20-07-2005 13:04 » |
|
После того как немного познакомился с сохранением данных в файлах, хочу познакомиться с бд, вот хочу узнать вопрос. При использовании файлов для каждого раздела создавался свой файл, а при использовании бд также создаётся таблица или при использовании бд нужно обезательно стремиться к уменьшению количества таблиц? У знакомых однозначного вопроса на етот вопрос я не получил, так, что решил спросить здесь.
|
|
|
Записан
|
|
|
|
MOPO3
Ай да дэдушка! Вах...
Команда клуба
Offline
Пол:
Холадна аднака!
|
|
« Ответ #1 : 20-07-2005 13:37 » |
|
После того как немного познакомился с сохранением данных в файлах, хочу познакомиться с бд, вот хочу узнать вопрос. При использовании файлов для каждого раздела создавался свой файл, а при использовании бд также создаётся таблица или при использовании бд нужно обезательно стремиться к уменьшению количества таблиц? У знакомых однозначного вопроса на етот вопрос я не получил, так, что решил спросить здесь.
Однозначного ответа на этот вопрос быть не может ИМХО. Тут уже как тебе удобнее
|
|
|
Записан
|
MCP, MCAD, MCTS:Win, MCTS:Web
|
|
|
PantiL
Гость
|
|
« Ответ #2 : 21-07-2005 21:17 » |
|
Стремление к уменьшению количества таблиц - нормализация их(таблиц) Это приводит к уменьшению объема памяти, занимаемого БД, и еще это приведет к усложнению запросов к базе и уменьшению работы скрипта. Поэтому если не очень большое приложение не надо стремиться к нормализации-ничего страшного если данные повторяются.
|
|
|
Записан
|
|
|
|
DET
Гость
|
|
« Ответ #3 : 25-07-2005 18:54 » |
|
Начал я знакомство с бд, но ток чёт на практике не получается. Вот хотел создать таблицу в бд: <html> <head> <title>Untitled Document</title> <meta http-equiv="Ñîäåðæèìîå-Òèï" content="text/html; charset=windows-1251"> </head> <body bgcolor="#dae3eb" text="#000000"> <?php Error_Reporting(E_ALL & ~E_NOTICE); $TheFile="data/admin.txt"; $Open=fopen ($TheFile, "a"); if ($Open) { $kd=$pass; fwrite ($Open, "$kd\t$nik\n"); fclose ($Open); print ("Данные записаны в файл<br>"); $TableRazdInternet="RazdInternet"; $TableRazdSoft="RazdSoft"; $TableRazdFAQ="RazdFAQ"; $Link=mysql_connect ($Host, $User, $Passvord); $Query="CREATE table $TableRazdInternet (id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, NazvRazd TEXT)"; if (mysql_db_query ($DBName, $Query, $Link)) { print ("Таблица была создана"); } else { print ("Тоблица не была создана"); } mysql_close ($Link); } else { } ?> </body> </html> Подскажите пожалуйста, что я делаю не так? Или как можно сделать лучше?
|
|
|
Записан
|
|
|
|
MOPO3
Ай да дэдушка! Вах...
Команда клуба
Offline
Пол:
Холадна аднака!
|
|
« Ответ #4 : 26-07-2005 05:06 » |
|
Хммм... Я бы вот этот кусок <?php $Link=mysql_connect ($Host, $User, $Passvord); $Query="CREATE table $TableRazdInternet (id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, NazvRazd TEXT)"; if (mysql_db_query ($DBName, $Query, $Link)) { print ("Таблица была создана"); } else { print ("Тоблица не была создана"); } mysql_close ($Link); ?>
переписал бы вот так : <?php $Link=mysql_connect ($Host, $User, $Passvord) or die("Unable to connect to server : ". mysql_error()); mysql_select_db($DBName, $Link) or die("Unable to select required database : ". mysql_error()); $Query="CREATE table $TableRazdInternet (id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, NazvRazd TEXT)"; $result = mysql_query($Query); if (!$result) { print mysql_error(); } else { print ("Тоблица была создана"); } mysql_close ($Link); ?>
|
|
|
Записан
|
MCP, MCAD, MCTS:Win, MCTS:Web
|
|
|
DET
Гость
|
|
« Ответ #5 : 27-07-2005 06:56 » |
|
А вот ещё вопрос, вот если делать например возможность на сайте создания новых разделов, то тогда, нужна генерация уникального имени для таблица создаваемой для нового раздела. Как это делается?
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #6 : 27-07-2005 09:11 » |
|
DET, пиши по-русски! Учти, какой вопрос задаешь, такой же мало полезный и ответ получишь.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
MOPO3
Ай да дэдушка! Вах...
Команда клуба
Offline
Пол:
Холадна аднака!
|
|
« Ответ #7 : 27-07-2005 09:14 » |
|
А вот ещё вопрос, вот если делать например возможность на сайте создания новых разделов, то тогда, нужна генерация уникального имени для таблица создаваемой для нового раздела. Как это делается?
Чего чего ? DET, пиши по-русски! Учти, какой вопрос задаешь, такой же мало полезный и ответ получишь.
100%
|
|
|
Записан
|
MCP, MCAD, MCTS:Win, MCTS:Web
|
|
|
DET
Гость
|
|
« Ответ #8 : 27-07-2005 10:30 » |
|
Хочу, для пробы знакомства с бд, сделать возможность добавления ссылок на сайт, как чуть ранее я пробовал с помощью файлов ток теперь с помощью этих самых бд. Вот например хочу я сделать, возможность группировать ссылки на сайты по разделам: игровые, спортивные, новостные и тд. И хочу чтоб я эти разделы создавал не спомощью кода (те сам делал странички, с помощью кода), а разделы создавались сами (я ввёл название, нажал кнопочку создать и готово). Так вот в чём вопрос для каждого раздела, помоему в этом случае нужно создать таблицу, чтобы данные о сайтах в данном разделе хранились в этой таблице. Так? Так вот в чём вопрос Название у каждой таблицы должно быть разное. Как сделать, чтобы для таблицы автоматически подбиралось имя и как проверить не была ли создана ранее, таблица с таким именем?
|
|
|
Записан
|
|
|
|
schnibbl
Гость
|
|
« Ответ #9 : 27-07-2005 11:07 » |
|
вопросик околотемный, если у меня используется база данных, как её на хост перенести ? если например я одбц конект использую, это же получается хозяин серва должен путь к моей базе данных у себя прописать в операционке ? или как там это всё делается ?
|
|
|
Записан
|
|
|
|
MOPO3
Ай да дэдушка! Вах...
Команда клуба
Offline
Пол:
Холадна аднака!
|
|
« Ответ #10 : 27-07-2005 11:11 » |
|
Хочу, для пробы знакомства с бд, сделать возможность добавления ссылок на сайт, как чуть ранее я пробовал с помощью файлов ток теперь с помощью этих самых бд. Вот например хочу я сделать, возможность группировать ссылки на сайты по разделам: игровые, спортивные, новостные и тд. И хочу чтоб я эти разделы создавал не спомощью кода (те сам делал странички, с помощью кода), а разделы создавались сами (я ввёл название, нажал кнопочку создать и готово). Ну без помощи кода ты вообще ничего не сделаеш Так вот в чём вопрос для каждого раздела, помоему в этом случае нужно создать таблицу, чтобы данные о сайтах в данном разделе хранились в этой таблице. Так? Так вот в чём вопрос Название у каждой таблицы должно быть разное. А вот это совсем не обязательно Как сделать, чтобы для таблицы автоматически подбиралось имя и как проверить не была ли создана ранее, таблица с таким именем?
Для того чтобы автоматически, ну например напиши генератор стринговых значений и пусть у тебя сгенерированый стринг и будет названием таблицы раз ты так хочеш. Ну а для проверки создана уже или нет, можно проверку написать. А вообще при попытке создать таблицу с уже существующим именем в одной и той же базе данных, ты элементарно получиш только ошибку и всё.
|
|
|
Записан
|
MCP, MCAD, MCTS:Win, MCTS:Web
|
|
|
MOPO3
Ай да дэдушка! Вах...
Команда клуба
Offline
Пол:
Холадна аднака!
|
|
« Ответ #11 : 27-07-2005 11:17 » |
|
вопросик околотемный, если у меня используется база данных, как её на хост перенести ? если например я одбц конект использую, это же получается хозяин серва должен путь к моей базе данных у себя прописать в операционке ? или как там это всё делается ?
Какую базу данных ты используеш ? Вообще-то практически с любой базой можно выполнить процедуру дампирования а на хосте уже этот дамп запустить на хостинговой базе, либо программно из скрипта
|
|
|
Записан
|
MCP, MCAD, MCTS:Win, MCTS:Web
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #12 : 27-07-2005 16:12 » |
|
DET, есть решение попроще и, по моему, правильнее: одно из полей должно идентифицировать раздел сайта. CREATE TABLE section ( id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, descr VARCHAR(255) NOT NULL )
CREATE TABLE links ( section_id INT NOT NULL, descr VARCHAR(255) NOT NULL, url VARCHAR(255) NOT NULL )
Создание раздела: INSERT INTO section (descr) VALUES ("название раздела - чисто информационное поле для вывода в браузер") Потом через mysql_insert_id() получи id созданного раздела.
Добавление ссылки в раздел: INSERT INTO links VALUES (id_раздела, "описание ссылки", "url")
Получение списка ссылок по заданному разделу: SELECT * FROM links WHERE section_id=id_раздела
Если ввести уникальное поле в links, то можно будет выборочно адресовать и ссылки (для изменения и удаления). Пример дан для MySQL.
|
|
« Последнее редактирование: 27-07-2005 16:15 от RXL »
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
schnibbl
Гость
|
|
« Ответ #13 : 28-07-2005 09:23 » |
|
тау у меня как раз в том и проблема, в выборе базы данных , я сначала неподумавши всё навалял в акцесе через одбц (в учебных целях), а терь вот задумался и думаю а как делать для сайтов, которые потом будеш выкладывать на хосты, причем не на свои?
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #14 : 28-07-2005 14:00 » |
|
schnibbl, обычно на хостинге используется MySQL, намного реже - MS SQL (только на win-серверах). Прочие базы встречаются реже.
MySQL может работать через ODBC, но лучше применять родной интерфейс. Он реализован для кучи языков.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
DET
Гость
|
|
« Ответ #15 : 29-07-2005 14:01 » |
|
RXL, спасибо за предложенный вариант, буду пробовать. Тут у меня опять проблема появилась теперь со считыванием данных из таблицы. <?php Error_Reporting(E_ALL & ~E_NOTICE); require_once("host.php"); $Table="1"; $Link=mysql_connect ($Host, $User, $Passvord) or die ("Unableto connect to server: ". mysql_error()); mysql_select_db ($DBName, $Link) or die ("Unable to select required database: ". mysql_error()); $Query="Select * from $Table"; $result=mysql_db_query ($DBName,$Query, $Link); $Rows=1; while ($Rows=mysql_fetch_row ($result)) { $Rows++; } ?>
Выдаёт: Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in k:\home\localhost\www\xxx.php on line 17 а 17-я это: while ($Rows=mysql_fetch_row ($result)) { Что я опять не так делаю, или может, нужно тоже другой способ использовать. Проверял при помощи: Denwer.
|
|
|
Записан
|
|
|
|
MOPO3
Ай да дэдушка! Вах...
Команда клуба
Offline
Пол:
Холадна аднака!
|
|
« Ответ #16 : 29-07-2005 14:22 » |
|
<?php $Rows=1; while ($Rows=mysql_fetch_row ($result)) { $Rows++; } ?>
А что ты вообще хочеш этим куском кода сделать ? Где вообще ты такое выкопал ?
|
|
|
Записан
|
MCP, MCAD, MCTS:Win, MCTS:Web
|
|
|
DET
Гость
|
|
« Ответ #17 : 29-07-2005 18:03 » |
|
<?php $Rows=1; while ($Rows=mysql_fetch_row ($result)) { $Rows++; } ?>
А что ты вообще хочеш этим куском кода сделать ? Где вообще ты такое выкопал ? Ну типа как с файлами, извлеч, строки, те. в переменную $Rows поместить массив состоящий из первой строки. $Rows++; - эт я глупость написал, просто нипойму почему не получается. А в общем я хочу научиться данные из таблицы помещать в переменную, чтобы можно было ту вывести на экран и тд, как я ранее это делал с файлами.
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #18 : 29-07-2005 20:39 » |
|
DET, проверь права доступа к базе и строку запроса. Я обычно, если не работает, проверяю это вручную через консльный клиент.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #19 : 29-07-2005 20:41 » |
|
$result=mysql_db_query ($DBName,$Query, $Link); Смотри ман! Откуда тут DBName?
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
DET
Гость
|
|
« Ответ #20 : 30-07-2005 09:12 » |
|
$result=mysql_db_query ($DBName,$Query, $Link); Смотри ман! Откуда тут DBName? Синтаксис : int mysql_db_query(string database, string query [,int link_identifier])
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #21 : 30-07-2005 09:23 » |
|
Извини, я _db не разглядел. Базу лучше выбрать сразу после подключения - контроль ошибок доступа будет проще. В то же время mysql_select_db() присутствует - зачем тогда такая форма? Используй mysql_query(). Если подключение к базе у тебя одно, то и link_id не обязательно указывать. Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in .... Вроде бы ясно: в $result совсем не то, что нужно. След., см. запрос. Например такой таблицы нет - след. и результата не будет совсем. Если бы была пустая таблица, то результат был бы, но пустой. Проверь права на таблицу и ее существование.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
MOPO3
Ай да дэдушка! Вах...
Команда клуба
Offline
Пол:
Холадна аднака!
|
|
« Ответ #22 : 30-07-2005 13:39 » |
|
Учтите, что эта функция НЕ переключает соединение обратно к предыдущей базе данных. Другими словами, вы не можете использовать эту функцию, чтобы временно переключиться на другую базу данных и выполнить запрос. Переключиться обратно вам придётся вручную. Крайне рекомендуется использовать синтаксис database.table в SQL-запросах, вместо использования этой функции. Это отрывок из описания на mysql_db_query(), а посему не вижу в твоём случае смысла её использовать. Ты же не тянеш данные из разных баз. Поэтому советую пользоваться mysql_query() Ну типа как с файлами Типо это далеко не одно и тоже : файлы и база данных. , извлеч, строки, те. в переменную $Rows поместить массив состоящий из первой строки . Странное желание И как-то мне не совсем ясно что ты тут имел ввиду $Rows++; - эт я глупость написал, просто нипойму почему не получается. А в общем я хочу научиться данные из таблицы помещать в переменную, чтобы можно было ту вывести на экран и тд, как я ранее это делал с файлами. Ну исходя из того что я понял, вот тебе пример того как я получил бы в какую-то переменную что то из базы : <?php /* Предположим что в таблице users есть поля id, uname, upass */ $sql = "SELECT * FROM users WHEER id = '12'"; $res = mysql_query($sql); if(!$res) { die(mysql_eror()); } else { while($row = mysql_fetch_array($res)) { $id = "{$row['id']}"; // в переменную $id получаем id юзера print "ID пользователя : ".$id.";\nИмя пользователя : {$row['uname']};\nПароль пользователя : {$row['upass']};\n"; } } ?>
|
|
« Последнее редактирование: 03-12-2007 20:34 от Алексей1153++ »
|
Записан
|
MCP, MCAD, MCTS:Win, MCTS:Web
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #23 : 30-07-2005 14:38 » |
|
MOPO3, что-то пример у иебя перегруженный. По логике у тебя выбирается 1 или 0 строк, а ты делаешь цикл. Тогда уж для наглядности можно было бы WHERE id=12 убрать. В mysql_fetch_array() рекомендую добавлять второй параметер, определяющий тип индекса возвращаемого массива. В некоторых версиях php по умолчанию были только цифровые индексы.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
MOPO3
Ай да дэдушка! Вах...
Команда клуба
Offline
Пол:
Холадна аднака!
|
|
« Ответ #24 : 30-07-2005 18:13 » |
|
MOPO3, что-то пример у иебя перегруженный. По логике у тебя выбирается 1 или 0 строк, а ты делаешь цикл. Тогда уж для наглядности можно было бы WHERE id=12 убрать. огласен как-то автоматом написал не думая В mysql_fetch_array() рекомендую добавлять второй параметер, определяющий тип индекса возвращаемого массива. В некоторых версиях php по умолчанию были только цифровые индексы. Ну это тоже верно, хотя я редко добавляю
|
|
|
Записан
|
MCP, MCAD, MCTS:Win, MCTS:Web
|
|
|
|