Nasıl belirli verileri içeren alanlar için mysql sorgusu sonuçları gösteriyor?

4 Cevap php

Ben bir mysql sorgu var:

$query = "SELECT * FROM movielist WHERE genre = 'comedy' ORDER BY dateadded DESC";

Ben bu tür 'komedi' içeriyor MovieList seçer, böylece onu değiştirmek gerekir.

(Not: benim türüm alan çoğunlukla birden fazla tür örnek "komedi, aksiyon, dram" içerecek.

4 Cevap

$query = "SELECT * FROM movielist WHERE genre LIKE '%comedy%' VEYADER BY dateadded DESC";

VEYA

$query = "SELECT * FROM movielist WHERE FIND_IN_SET('comedy', genre) VEYADER BY dateadded DESC";

İkincisi çoğu durumda daha iyidir.

Daha da iyisi, çok-çok ilişkileri kolaylaştırmak için separate tablo kullanmak gerekir.

movie_id ve genre_id (endekslenmiş yabancı anahtarları hem de) - iki alan 'movies_genres' denilen yani yeni tablo. Bir tarz bir film ya da yeni film için yeni bir tarz eklemek her zaman, bu tabloya bir girdi ekleyebilirsiniz.

Belirli bir türe ait tüm filmleri bulmak için:

SELECT movies.*
FROM movies
    JOIN movies_genres
        ON movies_genres.movie_id = movies.id
    JOIN genres
        ON movies_genres.genre_id = genres.id
WHERE genres.name = 'comedy'

Belirli bir film ait tüm türler bulmak için:

SELECT genres.*
FROM genres
    JOIN movies_genres
        ON movies_genres.genre_id = genres.id
    JOIN topics
        ON movies_genres.movie_id = movies.id
WHERE movies.name = 'Citizen Kane'

Lütfen şema ile find_in_set() ilginizi çekebilir

SELECT
  x,y,z
FROM
  movielist
WHERE
  find_in_list('comedy', genre)

Bu index-friendly ve potansiyel yavaş olmadığını aklınızda bulundurun.


normalized tables var genre='comedy, action, drama' (yani bir alandaki verileri yapılandırılmış) olmaz ama bir tablo ile

genres (
  id int auto_increment,
  genre_name varchar(...)
  ...
)

Tablo

movielist (
  id int auto_increment,
  title varchar(...)
  ...
)

and Tablo

moviegenres (
  movieid int,
  genreid int,
  ...
)

Ve bir sorgu olduğunu "yapıştırıcılar" birlikte birini veya ikisini kullanarak bu üç tablolarda saklanan bilgilerin JOINs.

Acil bir çözüm için, Dexter önerdi yok. Ancak uzun vadede size normalizing your database yarar bir edineceğim