PHP MySQL Alfabetik Bağlama

3 Cevap php

Ben kayıtların tam bir büyük bir tablo var ve PHP ile ben her biri için ayrı bir sayfa yapıyorum. Sayfada ben alphatbetically onları birbirine bağlaması isteyen, örneğin sayfa 'Dunn' kenar çubuğunda bu gibi bağlantıları olurdu:

  • Darren
  • Dave
  • Hüküm
  • Dunn
  • DUPP
  • Duss
  • Dutt

Her zaman 3 bağlantıları ile yan ya yukarı ve alfabenin aşağı gidiyor. Tüm veriler seferde tabloya eklenen olacak ve ben bu yaptığını düşünebilirsiniz tek yolu diğer veriler alfabe nispetle nerede olacak sokulması üzerine bir sayı ayarlanarak gereğidir.

Bu karmaşık görünüyor ve kolay bir ya da sadece daha iyi bir çözüm olup olmadığını merak ediyorum? Ben bu yüzden umarım bir bulabilirsiniz önce bu epeyce sitelerinde yapılır :) Herhangi bir yardım mutluluk duyacağız gördüm.

3 Cevap

Gumbo cevabı üzerine genişletilmesi: Bunu UNION kullanarak, isterseniz tek bir sorguda bunu yapabilirsiniz.

(
SELECT  `name` 
FROM  `table` 
WHERE  `name` <  "Dunn"
ORDER BY  `name` DESC 
LIMIT 3
)
UNION ALL (

SELECT  `name` 
FROM  `table`
WHERE  `name` =  "Dunn"
LIMIT 1
)
UNION ALL (

SELECT  `name` 
FROM  `table` 
WHERE  `name` >  "Dunn"
ORDER BY  `name` ASC
LIMIT 3
)

Böylece 7 gerekli kayıtları bir tablo veriyor.

Siz iki sorgu yapmanız gerekir:

  1. Preceed 3 kayıtları almak Dunn:

    SELECT `name`
    FROM `table`
    WHERE `name` < "Dunn"
    ORDER BY `name` DESC
    LIMIT 3
    
  2. Izleyin 3 kayıtları almak Dunn:

    SELECT `name`
    FROM `table`
    WHERE `name` > "Dunn"
    ORDER BY `name` ASC
    LIMIT 3
    

Lütfen name alan benzersiz bir dizin ise, ilk iki cevaplar iyi çalışır. Ama örneğin, birden fazla 'Dunn,' varsa, o biraz daha SQL yazmak gerekecek.

En istediğimiz 'Dunn 123 kayıt diyelim. Genelde biz record_id tarafından' Dunn 'için arama daha hassas olabilir ve isim (myscript.php? Id = değil çünkü, sayfa istendiğinde biz zaten bu bilirdik varsayıyorum 123 yerine myscript.php? name = Dunn). Daha sonra yukarıda 3 ve 3'ün altında toplamak için bunu yapabilirsiniz:

SELECT name FROM table WHERE name <= 'Dunn' AND record_id <> 123 ORDER BY name ASC LIMIT 3

Ve ...

SELECT name FROM table WHERE name >= 'Dunn' AND record_id <> 123 ORDER BY name ASC LIMIT 3