Форумы портала PHP.SU » » Работа с СУБД » Сортировка. Как работает?

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

1. SofiaKit - 11 Июля, 2011 - 10:35:29 - перейти к сообщению
Подскажите пожалуйста, как работает сортировка? Мне надо сделать сортировку по видео. К примеру:

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

А фильм имеет значение и Фантастика и Ужасы... Даже не могу сообразить как бд построить.
2. OrmaJever - 11 Июля, 2011 - 11:04:06 - перейти к сообщению
В даном случает скорее всего не сортировка нужна, а условие. В базе должно быть поле с название категории (например category)
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT * FROM TABLE WHERE category = 'ужасы'
3. EuGen - 11 Июля, 2011 - 11:21:13 - перейти к сообщению
Нет, не так.
Сделайте таблицы "фильмы" и "категории". А между ними связку "категории_фильмов".
То есть если у Вас есть

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

То в третьей таблице Вы будете хранить связи между фильмами и их категориями.
4. SofiaKit - 11 Июля, 2011 - 11:41:05 - перейти к сообщению
EuGen ого... ну смысл я поняла, спасибо. Но там надо будет связывать 3 запроса Не понял Помоги плз одним примером Улыбка
5. Slavenin - 11 Июля, 2011 - 12:23:49 - перейти к сообщению
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' 'условие может быть любым или их может быть несколько(условий)
6. EuGen - 11 Июля, 2011 - 12:34:47 - перейти к сообщению
Странный запрос. непонятное поле
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 категорий, можно использовать их.

А вообще, изначальная задача - "сортировка", так что вероятно я не очень правильно понял смысл.
7. morosit - 11 Июля, 2011 - 13:02:50 - перейти к сообщению
SofiaKit пишет:
А фильм имеет значение и Фантастика и Ужасы...

помоему вопрос в том, что делать если фильм относится к нескольким категориям?
8. SofiaKit - 11 Июля, 2011 - 13:03:53 - перейти к сообщению
Все-же запрос не выполняется.

Имеется 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 ('Фантастика','Ужасы')";


и ошибка запроса. Хотя мне надо чтоб вывело Фантастику и Ужасы
9. EuGen - 11 Июля, 2011 - 16:30:31 - перейти к сообщению
У Вас поля в запросе и в таблицах по-разному называются. Например,
SofiaKit пишет:
categories_films.category_id

и
SofiaKit пишет:
3. categories_films
categories_films_id | categories_id | video_id
10. SofiaKit - 11 Июля, 2011 - 18:05:32 - перейти к сообщению
не нашла ошибки Однако
11. Champion - 11 Июля, 2011 - 18:59:08 - перейти к сообщению
SofiaKit пишет:
не нашла ошибки

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

и
SofiaKit пишет:
3. categories_films
categories_films_id | categories_id | video_id
12. SofiaKit - 11 Июля, 2011 - 20:02:40 - перейти к сообщению
аха, точно.... но отобразился один и тот же фильм 2 раза - Красная Шапочка в моем случае. А надо чтоб не повторялся. Не понял
13. Champion - 11 Июля, 2011 - 20:38:35 - перейти к сообщению
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 ('Фантастика','Ужасы')
Не надо писать звездочку, потому что строки тогда будут различаться в айдишках и не будут одинаковыми.
14. Slavenin - 12 Июля, 2011 - 00:05:33 - перейти к сообщению
EuGen пишет:
Странный запрос. непонятное поле

ну да, торопился неправильно написал, конечно вместо catf.categories_films должно быть catf.category_id
15. SofiaKit - 12 Июля, 2011 - 00:42:11 - перейти к сообщению
Champion к сожалению не подойдет, так как выдергивается только имя на русском языке, и опять таки получается что "Красная шапочка" 2 раза Не понял

 

Powered by ExBB FM 1.0 RC1