Перейти к содержимому



Заметка в базе, относящаяся к разным категориям

#1 Kuchuluk

Kuchuluk
  • Пользователь
  • 315 сообщений
  • Репутация: 5
0

Отправлено 23 Февраль 2012 - 20:15

здравствуйте!
В базе есть таблица, содержащая категории. В этой таблице только два поля: идентификатор категории и название этой категории. И таблица с заметками. Пользователь при обращении к категории получает, список заметок, относящихся к этой категориии. Поэтому в таблице с заметками содержит еще поле с номером категории, к которой она относится.
Проблема в том, что если одна заметка относится сразу к нескольким категориям, как это реализовать? Может кто сталкивался с этим и может подсказать.

 

 

  • 0

#2 matroskin8

matroskin8
  • Пользователь PRO
  • 767 сообщений
  • Репутация: 143

Отправлено 23 Февраль 2012 - 20:42

Ну так а в чем проблема? Добавляете в таблицу несколько рядов под 1 статью:

id | article | category_id
1 | Статья 1 | 1
2 | Статья 1 | 3

Второй вариант в поле category_id идентификаторы категорий хранить в виде строки:

id | article | category_id
1 | Статья 1 | 1,3


  • 0


#3 Kuchuluk

Kuchuluk
    Topic Starter
  • Пользователь
  • 315 сообщений
  • Репутация: 5

Отправлено 23 Февраль 2012 - 21:10

Второй вариант в поле category_id идентификаторы категорий хранить в виде строки:


А если их в строку хранить через запятую, они обработчиком будут читаться как разные числа?
  • 0

#4 matroskin8

matroskin8
  • Пользователь PRO
  • 767 сообщений
  • Репутация: 143

Отправлено 23 Февраль 2012 - 21:29

Что есть обработчик?
Считали из БД ряд. В этом ряду имеем строку "1,3". Это одна цельная строка, для интерпретатора в ней нет никаких отдельных значений. Отдельные значения есть только для нас. Эту строку мы можем разбить на отдельные значения функцией explode():
$arr = explode(",", $row['category_id']);
В массиве $arr имеем на выходе идентификаторы категорий.
  • 1


#5 Kuchuluk

Kuchuluk
    Topic Starter
  • Пользователь
  • 315 сообщений
  • Репутация: 5

Отправлено 23 Февраль 2012 - 22:12

Что есть обработчик?
Считали из БД ряд. В этом ряду имеем строку "1,3". Это одна цельная строка, для интерпретатора в ней нет никаких отдельных значений. Отдельные значения есть только для нас. Эту строку мы можем разбить на отдельные значения функцией explode():

$arr = explode(",", $row['category_id']);
В массиве $arr имеем на выходе идентификаторы категорий.

аа, понял. спасибо!
  • 0

#6 matroskin8

matroskin8
  • Пользователь PRO
  • 767 сообщений
  • Репутация: 143

Отправлено 24 Февраль 2012 - 00:29

Пожалуйста :blink:
  • 0


#7 Kuchuluk

Kuchuluk
    Topic Starter
  • Пользователь
  • 315 сообщений
  • Репутация: 5

Отправлено 28 Март 2012 - 22:35

Ну так а в чем проблема? Добавляете в таблицу несколько рядов под 1 статью:

А когда в одной таблице скопиться очень много рядов (например, несколько тысяч), это не будет сказываться на работе сайта? Виснуть не будет?
  • 0

#8 matroskin8

matroskin8
  • Пользователь PRO
  • 767 сообщений
  • Репутация: 143

Отправлено 28 Март 2012 - 23:40

От нескольких тысяч не будет... и от нескольких десятков тысяч не будет... да и с сотнями тысяч все будет летать при 2-х условиях:
1) нормальный сервер;
2) нормализованная БД, т.е., проще говоря, БД с продуманной архитектурой и соблюдением нормальных форм.
  • 1


#9 Kuchuluk

Kuchuluk
    Topic Starter
  • Пользователь
  • 315 сообщений
  • Репутация: 5

Отправлено 02 Апрель 2012 - 17:35

matroskin8, так получается что при выводе последних заметок одна заметка будет повторяться по два раза. Это можно как-нибудь избежать?
  • 0

#10 matroskin8

matroskin8
  • Пользователь PRO
  • 767 сообщений
  • Репутация: 143

Отправлено 02 Апрель 2012 - 18:13

Элементарной группировкой получаем только уникальные статьи без повторов:
SELECT id, article FROM table GROUP BY article ORDER BY id DESC LIMIT 5;
В итоге 5 последних статей без дубликатов.
  • 1


robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Оформление форума – IPBSkins.ru