Pdo - Mysql Regex İle Arama /Sıralama
-
Merhaba arkadaşlar küçük verileri çok fazla column oluşturmamak için tek alanda saklıyorum , örnek olarak şöyle ki
Tablo adımız kitaplar olsun
id kitap adı yazarı Kitabın kategorisi 1 Kitap adı 1 yazar 1 1-2-5 2 kitap adı 2 yazar 2 5-6-9 Kitabın_kategorisi bölümünde yer alanlar => AnaKategori İD - AltKategori İD - Bölüm İD şeklinde sıralanıyor.
Mesela ben anakategori id si 1 olanları sıralamak istediğimde veya alt kategori id si 6 olanları sıralamak istediğimde ne şekilde bir yapı kullanmam gerekiyor.
- REgex olarak \(.*?)-\xi işimi görür mü ?
- Pdo kısmında da stackoverflow da gördüğüm kadarıyla
$sirala = $conn->prepare("select * from tablo where alan regexp ':regexalani' ");
$sirala->bindValue('regexalani' , $regex);
şeklinde kullanılıyor. regex değişkenine yazdığım regex i tanımlayınca hata veriyor.
Regex ile arama / sıralama nasıl yapılır veya bu konuda alternatif bir yöntem önerebilir misiniz ?
-
Neden Regex ? Normal sorgu işini görmüyor mu hocam merak ettim sadece konu baltalamak değil amacım Regex bilmiyorum ama sorgu kısmını sorarsan yardım edeyim.
-
Hocam regex olmak zorunda değil. Dediğim gibi Kitabın_kategorisi kısmında 3 farklı numeric değer tutuyorum ve bunları - işareti ile ayırmışım. Bu - işaretiyle ayırdığım değerlerden istediğime göre sıralamayı ne şekilde yapabilirim ? Mesela kitabin_kategorisi kısmında ilk değeri 1 olanları sıralamak istersem veya ikinci değeri 6 olanı sıralamak istersen ya da son değeri 5 olanı sıralamak istersem ne şekilde bir kod kullanmam gerekir ? (like ile içinde 5 var mı diye kontrol edersem tablo da gördüğün gibi ilk row un 3. değerinde 2. rowun da 1. değerinde yer almakta yani amacıma hizmet etmez. Eğer like ile yapılabiliyorsa nasıl yapıldığını bilmiyorum :S )
-
Like komutunu araştırır mısın? Mesela adı Ah ile başlayanları bulmak için Like ah% yetiyor hatta sonu ah olan için %ah ortada ah geçenler için de %ah% demek yetiyor.
-
MhmdAlmz bunu yazdı
Like komutunu araştırır mısın? Mesela adı Ah ile başlayanları bulmak için Like ah% yetiyor hatta sonu ah ortada ah geçenler için de %ah% demek yetiyor.
Hocam yukarda dediğim gibi mesela ben like ile %15% yaptım ve xxx-15-yyyx olanları sıralamak istedim fakat veriler arasında 115-15-151 var bu defa karma çorba olacak.
Yukardaki mantıktan dolayı like i denemedim bile ama yinede emin olmak için like komutunu tekrar araştıracağım ve deneyeceğim.
-
tam ne yapmak istediğini anlamadım ama explode ile "-" bölüp sonra where ile sorguya çekebilirsin
-
Realist bunu yazdı
tam ne yapmak istediğini anlamadım ama explode ile "-" bölüp sonra where ile sorguya çekebilirsin
Hocam şöyle izah edeyim. Kitap bilgilerinin bulunduğu bir tablom var. Bu kitaplar belirli kategoriler e ait. Kategoriler im ise 3 çeşit ana kategori , alt kategori ve bölüm dediğim alt kategoriye bağlı alt kategori semasal olarak şöyle
- Ana kategori
- - Alt kategori
- - - Bölüm
Şimdi ben şöyle düşündüm kitaplar tablo m da anakategoriid, altkategoriid ve bolumid diye 3 alan olusturacagima bu 3 bilgi tek alanda tutayım ve bunları - 'tire işareti ' veya başka bir ayraç ile ayirayim. Sonuçta id ler numeric olacağı için numEric olmayan herhangi bir ayraç kullanabilirim.
Yanı where ile esleyecegim alan zaten bu şekilde olduğu için explode kullanmak işime yaramıyor zaten
-
Veritabanı şemanı biraz değiştirmelisin. Anlatmak isterdim fakat uzun sürer. Anahtar kelimeleri aşağıya yazıyorum.
as
join
hierarchical query
nested categories
-
önün de üç seçenek var:
1, bu şekilde verileri çekip bi arraye at, kitap kategorisi kısmını explode() ile ayır sonra o arrayi sort et
2, üç ayrı sütun oluştur (performansa çok etki etmez üç sutun olması)
3. relation kullan, şöyleki: kitaplar, kategoriler ve kitap_kategori diye üç tablon olucak
ilkinde kitaplar, ikincisinde kategoriler olucak. kitap_kategori tablosunda da kitap_id, kategori_id seklinde iki sütun olucak. sen kitap adıyla aratıp o kitabın hangi kategorilerde olduğunuu görüceksin ve bir kitap birden fazla kategoride olabilicek.
ana kategori olayını da kategoriler tablosuna "ana kategori" sütunu ekleyip yapabilirsin
-
Tablo yapın berbat. Kitabın kategorisi kısmını n-n ilişki ile diğer bir tabloda saklamalısın.
RDBMS'in yapması gereken işi regexp ile sen yapacaksan RDBMS kullanmanın anlamı nedir?
O zaman document oriented sistemler kullan derim. MongoDB gibi.
-
Hocam Tabloların yapısı da belirsiz bu şekilde trilyon yol var ama o - ile ayrıdıklarını ID gibi sakla üstte herkes bas bas bağırmış yani bu kullanım saçma ilişkisel veri tabanı mantığına aykırı. Mesela Tek columd da ID-Ad-Soyad gibi birşey yaptığını düşün Uzunlukları da NVARCHAR(MAX) olsun :D Eee ne anlamı kaldı Veri Tabanının ? TXT dosyasında da veri saklayabilirsin bu şekilde hem Veritabanı masrafın da ortadan kalkmış olur hemde sana eziyet ve bütün mimariye kafa atmış hakaret etmiş olursun yani..