PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Без описания
SofiaKit
Отправлено: 11 Июля, 2011 - 10:35:29
Post Id


Частый гость


Покинул форум
Сообщений всего: 183
Дата рег-ции: Сент. 2010  


Помог: 0 раз(а)




Подскажите пожалуйста, как работает сортировка? Мне надо сделать сортировку по видео. К примеру:

Ужасы
Фантастика
Любовь
Детские

А фильм имеет значение и Фантастика и Ужасы... Даже не могу сообразить как бд построить.
 
 Top
OrmaJever Модератор
Отправлено: 11 Июля, 2011 - 11:04:06
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




В даном случает скорее всего не сортировка нужна, а условие. В базе должно быть поле с название категории (например category)
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT * FROM TABLE WHERE category = 'ужасы'


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
EuGen Администратор
Отправлено: 11 Июля, 2011 - 11:21:13
Post Id


Профессионал


Покинул форум
Сообщений всего: 9097
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Нет, не так.
Сделайте таблицы "фильмы" и "категории". А между ними связку "категории_фильмов".
То есть если у Вас есть

0. Таблица films, поля id, name
1. Таблица categories, поля id, name
2. Таблица categories_films, поля id, film_id, category_id

То в третьей таблице Вы будете хранить связи между фильмами и их категориями.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
SofiaKit
Отправлено: 11 Июля, 2011 - 11:41:05
Post Id


Частый гость


Покинул форум
Сообщений всего: 183
Дата рег-ции: Сент. 2010  


Помог: 0 раз(а)




EuGen ого... ну смысл я поняла, спасибо. Но там надо будет связывать 3 запроса Не понял Помоги плз одним примером Улыбка
 
 Top
Slavenin
Отправлено: 11 Июля, 2011 - 12:23:49
Post Id



Посетитель


Покинул форум
Сообщений всего: 285
Дата рег-ции: Май 2010  
Откуда: Тверь


Помог: 4 раз(а)




CODE (SQL):
скопировать код в буфер обмена
  1. SELECT f.name, cat.name FROM categories_films AS catf
  2. INNER JOIN films AS f
  3. ON catf.film_id = f.id
  4. INNER JOIN categories AS cat
  5. ON catf.categories_films = cat.id
  6. WHERE catf.categories_films = '1' 'условие может быть любым или их может быть несколько(условий)

(Отредактировано автором: 11 Июля, 2011 - 12:24:24)

 
 Top
EuGen Администратор
Отправлено: 11 Июля, 2011 - 12:34:47
Post Id


Профессионал


Покинул форум
Сообщений всего: 9097
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Странный запрос. непонятное поле
Slavenin пишет:
catf.categories_films

да и зачем кавычки целочисленному полю - тоже неясно. Ну да ладно, приведу свой вариант
Предположим, у нас есть категории
id|name
1|Ужасы
2|Фантастика
3|Любовь
4|Детские
И мы хотим выбрать все вильмы категорий Фантастика и Ужасы. Это будет например:
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. SELECT films.name
  3. FROM films
  4.   LEFT JOIN categories_films ON films.id=categories_films.film_id
  5.   LEFT JOIN categories ON categories.id=categories_films.category_id
  6. WHERE categories.name IN ('Фантастика','Ужасы')
  7.  

- выберет Вам все фильмы, у которых в категориях есть указанное.Ну или, если знаете id категорий, можно использовать их.

А вообще, изначальная задача - "сортировка", так что вероятно я не очень правильно понял смысл.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
morosit
Отправлено: 11 Июля, 2011 - 13:02:50
Post Id



Посетитель


Покинул форум
Сообщений всего: 307
Дата рег-ции: Июль 2010  
Откуда: Казахстан


Помог: 4 раз(а)




SofiaKit пишет:
А фильм имеет значение и Фантастика и Ужасы...

помоему вопрос в том, что делать если фильм относится к нескольким категориям?
 
 Top
SofiaKit
Отправлено: 11 Июля, 2011 - 13:03:53
Post Id


Частый гость


Покинул форум
Сообщений всего: 183
Дата рег-ции: Сент. 2010  


Помог: 0 раз(а)




Все-же запрос не выполняется.

Имеется 3 таблицы:

1. video
video_id | video_name_ru
1 Красная шапочка
2 Воздушные

2. categories
categories_id | categories_name
1 Ужасы
2 Фантастика


3. categories_films
categories_films_id | categories_id | video_id
1 1 1
2 2 1
3 1 2

Запрос выполнила так:
PHP:
скопировать код в буфер обмена
  1. $select_video = "SELECT * FROM video LEFT JOIN categories_films ON video.video_id=categories_films.video_id LEFT JOIN categories ON categories.categories_id=categories_films.category_id WHERE categories.categories_name IN ('Фантастика','Ужасы')";


и ошибка запроса. Хотя мне надо чтоб вывело Фантастику и Ужасы
 
 Top
EuGen Администратор
Отправлено: 11 Июля, 2011 - 16:30:31
Post Id


Профессионал


Покинул форум
Сообщений всего: 9097
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




У Вас поля в запросе и в таблицах по-разному называются. Например,
SofiaKit пишет:
categories_films.category_id

и
SofiaKit пишет:
3. categories_films
categories_films_id | categories_id | video_id


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
SofiaKit
Отправлено: 11 Июля, 2011 - 18:05:32
Post Id


Частый гость


Покинул форум
Сообщений всего: 183
Дата рег-ции: Сент. 2010  


Помог: 0 раз(а)




не нашла ошибки Однако
 
 Top
Champion Супермодератор
Отправлено: 11 Июля, 2011 - 18:59:08
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




SofiaKit пишет:
не нашла ошибки

EuGen пишет:
SofiaKit пишет:
categories_films.category_id

и
SofiaKit пишет:
3. categories_films
categories_films_id | categories_id | video_id
 
 Top
SofiaKit
Отправлено: 11 Июля, 2011 - 20:02:40
Post Id


Частый гость


Покинул форум
Сообщений всего: 183
Дата рег-ции: Сент. 2010  


Помог: 0 раз(а)




аха, точно.... но отобразился один и тот же фильм 2 раза - Красная Шапочка в моем случае. А надо чтоб не повторялся. Не понял
 
 Top
Champion Супермодератор
Отправлено: 11 Июля, 2011 - 20:38:35
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




CODE (SQL):
скопировать код в буфер обмена
  1. SELECT DISTINCT video_name_ru  FROM video LEFT JOIN categories_films ON video.video_id=categories_films.video_id LEFT JOIN categories ON categories.categories_id=categories_films.category_id WHERE categories.categories_name IN ('Фантастика','Ужасы')
Не надо писать звездочку, потому что строки тогда будут различаться в айдишках и не будут одинаковыми.
 
 Top
Slavenin
Отправлено: 12 Июля, 2011 - 00:05:33
Post Id



Посетитель


Покинул форум
Сообщений всего: 285
Дата рег-ции: Май 2010  
Откуда: Тверь


Помог: 4 раз(а)




EuGen пишет:
Странный запрос. непонятное поле

ну да, торопился неправильно написал, конечно вместо catf.categories_films должно быть catf.category_id
 
 Top
SofiaKit
Отправлено: 12 Июля, 2011 - 00:42:11
Post Id


Частый гость


Покинул форум
Сообщений всего: 183
Дата рег-ции: Сент. 2010  


Помог: 0 раз(а)




Champion к сожалению не подойдет, так как выдергивается только имя на русском языке, и опять таки получается что "Красная шапочка" 2 раза Не понял
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Работа с СУБД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB