Проектирование БД

dima4321

Новичок
Все очень просто наверно. Но я тупой.

нужно 4 столбика. Я их сделал.

1. ID (автоинкремент)
2 NAME ( Имя товара)
3 PAGE (страница описания товара)
4 ABOUT (описание товара)


Суть вот в чем. Будет так , что у товара несколько страниц описания.

в итоге например

присвоился id затем вбил имя, номер страницы, и написал первое описание
спускаюсь ниже забиваю страница №2 и пишу продолжение описания.
в итоге присвоился на эту строчку свой id. Так и должно быть ??
как правильно сделать выборку и правильна ли структура ??
Может можно сделать корректней.
 

Вурдалак

Продвинутый новичок
Надо заводить отдельную таблицу pages. Создавая запись в таблице товаров, ты создаёшь товар, логично? Не совсем правда ясен смысл поля page.
 

Redjik

Джедай-мастер
Эм не совсем понятно, что значит несколько страниц описания... =)

id (int, autoincrement)
name (text)
page (text)
about (page)

и все - вставляешь в page хоть войну и мир...

Конкретезируй структуру... там разберемся =)
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Ему нужно разбить описание товара на страницы, то есть часть на первой, часть на другой.

Все это укладывается в то, что создав товар, получаем его id, после чего можно привязать к нему страницы по структуре:

page_id (int, a_increment, primary) | cargo_id (int, index) | text (text)

все.
 

Redjik

Джедай-мастер
Ну предположим... все зависит от того, что имеем - я бы делал так...

или 2 поля в бд (page1 и page2) или через массив в одном поле (pages) с разделителем |

на вторую страницу делаешь в админке отдельную проверку по id

Все это укладывается в то, что создав товар, получаем его id, после чего можно привязать к нему страницы по структуре:
если будет 20 000 товаров то это удвоит колличество запросов к бд, что не очень хорошо...
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Иван Redjik Матвеев
И что? Это вообще ни коим образом не скажется на количестве запросов.
 

dima4321

Новичок
Ему нужно разбить описание товара на страницы, то есть часть на первой, часть на другой.

Все это укладывается в то, что создав товар, получаем его id, после чего можно привязать к нему страницы по структуре:

page_id (int, a_increment, primary) | cargo_id (int, index) | text (text)

все.
c0dex правильно понимает мои слова.

В целом будет так. Часть товара будет иметь одну страницу описания. Но есть товары где будет 2-3 страницы описания, возможно 4 --это предел.
Войну и мир я не разбиваю))

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

т.е. слепить все 3 страницы в одну ячейку, а потом выбирать из нее нужное не вариант !
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Ну ты сделал первичный инсерт в БД, где узнал id товара, что ты только что вставил, вот его и юзаешь при подстановке в запрос, который у тебя пишет постраничную инфу. ХЗ как описать в коде %)
 

SOKOJI

Новичок
Я бы сделал так:

goods (таблица с товаром)
good_id // ID товара
name // Название товара

pages (таблица со страницами)
page_id // ID страницы
good_id // ID товара (внешний ключ)
content // Содержание страницы
И выборку проще будет делать в дальнейшем.
 

Redjik

Джедай-мастер
Поля бд
(id (int,autoincrement)
page1 (text)
page2 (text)
page3 (text)
page4(text)


Админская часть (примерная)
PHP:
<?php
if ($_SERVER['REQUEST_METHOD']=='POST') { 
$page1 =stripcslashes($_POST['page1']);
$page2 =stripcslashes($_POST['page2']);
$page3 =stripcslashes($_POST['page3']);
$page4 =stripcslashes($_POST['page4']);

// тут нужно будет создать коннкет с бд и выбор бд


$query = "INSERT INTO  название_твоей_таблицы VALUES(Null,'$page1','$page2','$page3','$page4')";
$result = mysql_query($query);

// закрытие связи с бд

}
?>
<form name="" action='$_SERVER['PHP_SELF']' method="POST">
<input type="TEXTAREA" name="page1">
<input type="TEXTAREA" name="page2">
<input type="TEXTAREA" name="page3">
<input type="TEXTAREA" name="page4">
<input type="submit" value="ok">
</form>
 

Redjik

Джедай-мастер
А если 100500 страниц будет?
Но есть товары где будет 2-3 страницы описания, возможно 4 --это предел.
Если будет намного больше, то кончено лучше вариант mayak и SOKOJI

А так - лично мне удобнее вылавливать тараканов непосредственно в базе в одной таблице, чем ковырять несколько =)
 

timach2

Новичок
автор будь проще сделай как все сокращенное описание и полное
 

Vin-Diesel

Новичок
PHP:
CREATE TABLE goods (
 id_good INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
 name VARCHAR(32) NOT NULL,
 PRIMARY KEY (id_good)
) ENGINE=InnoDB;

CREATE TABLE pages (
 id_page INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
 id_good INT(11) UNSIGNED NOT NULL,
 pos TINYINT(1) UNSIGNED NOT NULL,
 page TEXT NOT NULL,
 PRIMARY KEY (id_page, pos);
) ENGINE=InnoDB;

INSERT INTO goods VALUES (1, 'Топор "Маньяк"');
INSERT INTO pages VALUES (1, 1, 1, 'Топоры данного типа используются для метания по движущимся мишеням.');
INSERT INTO pages VALUES (1, 1, 2, 'Дополнительное использование включает в себя рубящие атаки из-за спины.');
GET /view.php?gid=1
PHP:
SELECT name, page FROM goods LEFT JOIN pages USING(id_good) WHERE id_good = 1 AND pos = 1;
GET /view.php?pid=1
PHP:
SELECT name, page FROM goods LEFT JOIN pages USING(id_good) WHERE id_page = 1 AND pos = 1;
GET /view.php?pid=1&page=2
PHP:
SELECT name, page FROM goods LEFT JOIN pages USING(id_good) WHERE id_page = 1 AND pos = 2;
Хотя во второй таблице id_page не нужен, сместить его роль на id_good
Кто хочет пообщаться пишите в личку оставлю аську)
 
Сверху