Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Вопрос о БД  (Прочитано 21689 раз)
0 Пользователей и 1 Гость смотрят эту тему.
DET
Гость
« : 20-07-2005 13:04 » 

После того как немного познакомился с сохранением данных в файлах, хочу познакомиться с бд, вот хочу узнать вопрос. При использовании файлов для каждого раздела создавался свой файл, а при использовании бд также создаётся таблица или при использовании бд нужно обезательно стремиться к уменьшению количества таблиц?
У знакомых однозначного вопроса на етот вопрос я не получил, так, что решил спросить здесь.
Записан
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #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="&#209;&#238;&#228;&#229;&#240;&#230;&#232;&#236;&#238;&#229;-&#210;&#232;&#239;" 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
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #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
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 27-07-2005 09:11 » 

DET, пиши по-русски! Учти, какой вопрос задаешь, такой же мало полезный и ответ получишь.

Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #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
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #10 : 27-07-2005 11:11 » 

Хочу, для пробы знакомства с бд, сделать возможность добавления ссылок на сайт, как чуть ранее я пробовал с помощью файлов ток теперь с помощью этих самых бд.
Вот например хочу я сделать, возможность группировать ссылки на сайты по разделам: игровые, спортивные, новостные и тд. И хочу чтоб я эти разделы создавал не спомощью кода (те сам делал странички, с помощью кода), а разделы создавались сами (я ввёл название, нажал кнопочку создать и готово).
Ну без помощи кода ты вообще ничего не сделаеш Ага
Так вот в чём вопрос для каждого раздела, помоему в этом случае нужно создать таблицу, чтобы данные о сайтах в данном разделе хранились в этой таблице. Так? Так вот в чём вопрос Название у каждой таблицы должно быть разное.
А вот это совсем не обязательно Ага
Как сделать, чтобы для таблицы автоматически подбиралось имя и как проверить не была ли создана ранее, таблица с таким именем?
Для того чтобы автоматически, ну например напиши генератор стринговых значений и пусть у тебя сгенерированый стринг и будет названием таблицы раз ты так хочеш.
Ну а для проверки создана уже или нет, можно проверку написать. А вообще при попытке создать таблицу с уже существующим именем в одной и той же базе данных, ты элементарно получиш только ошибку и всё.
Записан

MCP, MCAD, MCTS:Win, MCTS:Web
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #11 : 27-07-2005 11:17 » 

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

MCP, MCAD, MCTS:Win, MCTS:Web
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #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
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #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
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #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
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #18 : 29-07-2005 20:39 » 

DET, проверь права доступа к базе и строку запроса. Я обычно, если не работает, проверяю это вручную через консльный клиент.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #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
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #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
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #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 = &#39;12&#39;";
$res mysql_query($sql);
if(!
$res) { die(mysql_eror()); } else {
   while(
$row mysql_fetch_array($res))
   {
        
$id "{$row[&#39;id&#39;]}"; // в переменную $id получаем id юзера
        
print "ID пользователя : ".$id.";\nИмя пользователя : {$row[&#39;uname&#39;]};\nПароль пользователя : {$row[&#39;upass&#39;]};\n";
   
}
}
?>

« Последнее редактирование: 03-12-2007 20:34 от Алексей1153++ » Записан

MCP, MCAD, MCTS:Win, MCTS:Web
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #23 : 30-07-2005 14:38 » 

MOPO3, что-то пример у иебя перегруженный. По логике у тебя выбирается 1 или 0 строк, а ты делаешь цикл. Тогда уж для наглядности можно было бы WHERE id=12 убрать.
В mysql_fetch_array() рекомендую добавлять второй параметер, определяющий тип индекса возвращаемого массива. В некоторых версиях php по умолчанию были только цифровые индексы.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #24 : 30-07-2005 18:13 » 

MOPO3, что-то пример у иебя перегруженный. По логике у тебя выбирается 1 или 0 строк, а ты делаешь цикл. Тогда уж для наглядности можно было бы WHERE id=12 убрать.
огласен Улыбаюсь как-то автоматом написал не думая Ага
В mysql_fetch_array() рекомендую добавлять второй параметер, определяющий тип индекса возвращаемого массива. В некоторых версиях php по умолчанию были только цифровые индексы.
Ну это тоже верно, хотя я редко добавляю Улыбаюсь
Записан

MCP, MCAD, MCTS:Win, MCTS:Web
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines