Mysql Benzersiz Sorgu

3 Cevap php

Ben sadece birlikte ana sayfasını görüntülemek istediğiniz herhangi bir show için birden fazla bölüm vardır çünkü Şimdi (ben kendi içine bölünmüş programları ve bölüm olmalıdır) bir tabloya dolu bir program için gerekli tüm bilgileri içeren bir veritabanı listeleyen bir program var başlık adları artan ve seçilen mektupta. Şimdi temel sorgu yapmak nasıl biliyorum ama bu tüm bildiğim

Programme_table DISTINCT unvanını WHERE '$ harf%' GİBİ başlık

Ben eserler i kullanmak olduğunu biliyorum. Ama ben nasıl ayrı olmak üzere bir başlık ama aynı zamanda olsun başlıktan seri numarası altabilirim tam böylece görüntüyü döndürmek için bir seri numarası gerektiren dinamik bir görüntü yükleme kullanıyorum?

Ben açık olmuştur umarım.

Herhangi bir yardım için teşekkür ederiz

Paul

3 Cevap

Bir GROUP BY fıkra için DISTINCT anahtar yerini alabilir.

SELECT
  title 
, series_number
FROM 
  programme_table 
WHERE title LIKE '$letter%'
GROUP BY 
  title
, series_number

There are currently two other valid options:
The option suggested by Mohammad is to use a HAVING clause in stead of the WHERE clause this is actually less optimal:

The WHERE clause is used to restrict records, and is also used by the query optimizer to determine which indexes and tables to use. HAVING is a "filter" on the final result set, and is applied after ORDER BY and GROUP BY, so MySQL cannot use it to optimize the query.
So HAVING is a lot less optimal and you should only use it when you cannot use 'WHERE' to get your results.

quosoo DISTINCT anahtar kelime sorgusu listelenen tüm sütunlar için geçerli olduğuna işaret ediyor. Bu doğrudur, ancak genellikle insanlar ( there is no performance difference In some specific cases there is a performance difference ) bunu önermiyoruz. Hiçbir gerçek performans farkı var bu yüzden MySQL iyileştirici ancak her ikisi için aynı sorguyu tükürür.

Update Although MySQL does apply the same optimization to both queries, there is actually a difference: when DISTINCT is used in combination with a LIMIT clause, MySQL stops as soon as it finds enough unique rows. so

SELECT DISTINCT
  title 
, series_number
FROM 
  programme_table 
WHERE 
  title LIKE '$letter%'

aslında en iyi seçenektir.

Sadece sorgu için dizi eklerseniz benzersiz başlık, dizi kombinasyonları bir dizi döndürmesi gerekir böylece DISTINCT anahtar kelime Sütun listesi için aslında çalışır:

SELECT DISTINCT title, series FROM programme_table WHERE title LIKE '$letter%'

Hey bunun için teşekkürler ama işe yaramaz 999 programları render yanı serisi tek ve gösteri bağışta bulunan kimse bu yüzden ben aynı seri ile yaklaşık 1000 kayıtları var.

Ancak bu benzersiz yapmak ve seri numarasını görüntülemek için uzak öğrendim

SEÇİN * dört bir FROM INNER JOIN (başlık SEÇ, MinPid AS MIN (serisi) dört WHERE başlığı BY '$ harf%' grubu gibi başlık) ON b a.title = b.title VE a.series = b.MinPid

Umuyorum ki gelecekte herkes yardımcı olur ve yanıtlar için teşekkür ederim :)