lostyazilim
tr.link

PHP sorgusu içinde ORDER BY ve IF ELSE beraber kullanılabilir mi?

11 Mesajlar 1.708 Okunma
acebozum
tr.link

BEYAZMASTER BEYAZMASTER YÜCE ALLAH'IN aciz 1 kulu Kullanıcı
  • Üyelik 04.02.2020
  • Yaş/Cinsiyet 43 / E
  • Meslek Yazılım...
  • Konum Diğer
  • Ad Soyad O** B**
  • Mesajlar 597
  • Beğeniler 154 / 153
  • Ticaret 0, (%0)
Hayırlı akşamlar...

Standart sıralama biçimlerinin dışında, sorgu içinde şartlı bir sıralama yapmak için nasıl bir kod yapısı gerekir?

Netleştirmek için şöyle açayım;

Yerli ve ithal ürünlerin + indirimli ve indirimsiz ürünlerin karışık olarak listelendiği bir tablo düşünelim.

1) Tablonun en başında;
product_by='MADE IN TURKIYE' olan ürünlerin alfabetik olarak sıralanması,
hemen altında da
product_by='world' olan ürünlerin alfabetik olarak sıralanması,


2) Bu iki gruba ait ürünlerin ise kendi içinde;
product_discount='yes' olan ürünlerin önce
ve
product_price DESC ===> fiyatı en düşük olanın en üste olacak şekilde dizilmesi


NASIL SAĞLANABİLİR?




Şu linkteki örnekten yola çıkıp bir takım denemeler yaptım ama henüz netice alamadım.

https://stackoverflow.com/questions/3550942/can-you-add-an-if-statement-in-order-by

Çalışmayan ama beyin fırtınasını başlatabilecek bir deneme kodu;

...
ORDER BY
IF(product_by='MADE IN TURKIYE') DESC,
IF(product_discount='yes') DESC,
...



Biraz girift oldu farkındayım ama juniorlar için...
Üstadlar için değil...


Teşekkürler...
 

 

ÖNCE "İYİ,DOĞRU,GÜZEL BİR İNSAN" OLMAK (VEFA,TEVAZZU,NAİFLİK,SAYGI,...) GEREK!
Sonra wm oluruz.
elektronikssl
webimgo

OmerGunay OmerGunay https://omergunay.net Kullanıcı
  • Üyelik 15.05.2015
  • Yaş/Cinsiyet 33 / E
  • Meslek PHP Developer
  • Konum İstanbul Avrupa
  • Ad Soyad Ö** G**
  • Mesajlar 1207
  • Beğeniler 382 / 381
  • Ticaret 16, (%100)
BEYAZMASTER öncelikle sql sorgusu içinde if kullanımı şu şekilde oluyor.

IF(KOŞUL, DOĞRU, YANLIŞ)

Sizin yazdığınızı şöyle yapıp bi deneyebilir misiniz? Benim ki de bir fikir :)


ORDER BY
IF(product_by='MADE IN TURKIYE', "DESC", "null")
BEYAZMASTER

kişi bu mesajı beğendi.

Herkes yediğinden ikram eder..(Yavuz Sultan Selim)

emreyvz emreyvz .NET Core & Angular & PHP Kullanıcı
  • Üyelik 19.04.2016
  • Yaş/Cinsiyet 28 / E
  • Meslek Bilgisayar Mühendisi
  • Konum İstanbul Anadolu
  • Ad Soyad E** Y**
  • Mesajlar 691
  • Beğeniler 110 / 250
  • Ticaret 24, (%100)
1)
Tablonun en başında;
product_by='MADE IN TURKIYE' olan ürünlerin alfabetik olarak sıralanması,
hemen altında da
product_by='world' olan ürünlerin alfabetik olarak sıralanması,


Select * from products order by product_by ASC, urun_adi ASC;


2) Bu iki gruba ait ürünlerin ise kendi içinde;
product_discount='yes' olan ürünlerin önce
ve
product_price DESC ===> fiyatı en düşük olanın en üste olacak şekilde dizilmesi

(Önce Made in Türkiye en ucuz ve indirimli olanlar gelecek)

Select * from products order by product_by ASC, product_price ASC, product_discount DESC;


Kolay gelsin.
BEYAZMASTER

kişi bu mesajı beğendi.

BEYAZMASTER BEYAZMASTER YÜCE ALLAH'IN aciz 1 kulu Kullanıcı
  • Üyelik 04.02.2020
  • Yaş/Cinsiyet 43 / E
  • Meslek Yazılım...
  • Konum Diğer
  • Ad Soyad O** B**
  • Mesajlar 597
  • Beğeniler 154 / 153
  • Ticaret 0, (%0)

ÖmerGünay adlı üyeden alıntı

BEYAZMASTER öncelikle sql sorgusu içinde if kullanımı şu şekilde oluyor.

IF(KOŞUL, DOĞRU, YANLIŞ)

Sizin yazdığınızı şöyle yapıp bi deneyebilir misiniz? Benim ki de bir fikir :)


ORDER BY
IF(product_by='MADE IN TURKIYE', "DESC", "null")


Öncelikle genel bilgiler ve paylaştığınız fikir için teşekkür ederim üstadım...

Aşırı yoğunluktan ancak şimdi deneme fırsatım oldu, maalesef çalışmadı...

Nazar boncuğu diyelim... :)

Zaman içerisinde denemeye devam...
 

 

ÖNCE "İYİ,DOĞRU,GÜZEL BİR İNSAN" OLMAK (VEFA,TEVAZZU,NAİFLİK,SAYGI,...) GEREK!
Sonra wm oluruz.
wmaraci
wmaraci

BEYAZMASTER BEYAZMASTER YÜCE ALLAH'IN aciz 1 kulu Kullanıcı
  • Üyelik 04.02.2020
  • Yaş/Cinsiyet 43 / E
  • Meslek Yazılım...
  • Konum Diğer
  • Ad Soyad O** B**
  • Mesajlar 597
  • Beğeniler 154 / 153
  • Ticaret 0, (%0)

emreyvz adlı üyeden alıntı

1)
Tablonun en başında;
product_by='MADE IN TURKIYE' olan ürünlerin alfabetik olarak sıralanması,
hemen altında da
product_by='world' olan ürünlerin alfabetik olarak sıralanması,


Select * from products order by product_by ASC, urun_adi ASC;


2) Bu iki gruba ait ürünlerin ise kendi içinde;
product_discount='yes' olan ürünlerin önce
ve
product_price DESC ===> fiyatı en düşük olanın en üste olacak şekilde dizilmesi

(Önce Made in Türkiye en ucuz ve indirimli olanlar gelecek)

Select * from products order by product_by ASC, product_price ASC, product_discount DESC;


Kolay gelsin.



Üstadım aşırı yoğunluktan ancak irdeleyebildim mesajınızı...
Paylaştığınız mantığı çok iyi anladım;
Verilerin alfabetik ve numerik dizilimlerinden yaralanmak çok yerinde...
Fakat bu sıralamanın yeterli olamayacağı durumlar için bir çözüm geliştirmeye çalıştım...

Örneğin;

made in azerbaycan
made in japonya
made in pakistan
made in TÜRKİYE
made in uruguay
made in world


Normalde üstteki gibi olan alfabetik bir sıralamayı ORDER BY KULLANARAK akttaki düzende dizilmesini nasıl sağlarız üstad;

made in TÜRKİYE
made in azerbaycan
made in pakistan
made in japonya
made in uruguay
made in world


(İlk mesajımda böyle bir örnek vermem gerekirdi, daha açıklayıcı olurdu farkındayım.)
 

 

ÖNCE "İYİ,DOĞRU,GÜZEL BİR İNSAN" OLMAK (VEFA,TEVAZZU,NAİFLİK,SAYGI,...) GEREK!
Sonra wm oluruz.

emreyvz emreyvz .NET Core & Angular & PHP Kullanıcı
  • Üyelik 19.04.2016
  • Yaş/Cinsiyet 28 / E
  • Meslek Bilgisayar Mühendisi
  • Konum İstanbul Anadolu
  • Ad Soyad E** Y**
  • Mesajlar 691
  • Beğeniler 110 / 250
  • Ticaret 24, (%100)

BEYAZMASTER adlı üyeden alıntı

Üstadım aşırı toğunluktan ancak irdeleyebildim mesajınızı...
Paylaştığınız mantığı çok iyi anladım;
Verilerin alfabetik ve numerik dizilimlerinden yaralanmak çok yerinde...
Fakat bu sıralamanın yeterli olamayacağı durumlar için bir çözüm geliştirmeye çalıştım...

Örneğin;

made in azerbaycan
made in japonya
made in pakistan
made in TÜRKİYE
made in uruguay
made in world


Normalde üstteki gibi olan alfabetik bir sıralamayı ORDER BY KULLANARAK akttaki düzende dizilmesini nasıl sağlarız üstad;

made in TÜRKİYE
made in azerbaycan
made in pakistan
made in japonya
made in uruguay
made in world


(İlk mesajımda böyle bir örnek vermem gerekirdi, daha açıklayıcı olurdu farkındayım.)



SELECT * FROM tablo_adi ORDER BY CASE WHEN product_by = 'made in TÜRKİYE' THEN 1 ELSE 2 END, product_by ;


Kolay gelsin.
BEYAZMASTER

kişi bu mesajı beğendi.

BEYAZMASTER BEYAZMASTER YÜCE ALLAH'IN aciz 1 kulu Kullanıcı
  • Üyelik 04.02.2020
  • Yaş/Cinsiyet 43 / E
  • Meslek Yazılım...
  • Konum Diğer
  • Ad Soyad O** B**
  • Mesajlar 597
  • Beğeniler 154 / 153
  • Ticaret 0, (%0)
emreyvz tamamlayıcı katkınız için teşekkür ederim üstadım.

Lakin kodu an itibari ile anlamış değilim, zamanla çözmeye çalışacağım...

Hayırlı akşamlar, kolaylıklar dilerim.
 

 

ÖNCE "İYİ,DOĞRU,GÜZEL BİR İNSAN" OLMAK (VEFA,TEVAZZU,NAİFLİK,SAYGI,...) GEREK!
Sonra wm oluruz.

AzveNet AzveNet WM Aracı Kullanıcı
  • Üyelik 13.06.2019
  • Yaş/Cinsiyet 43 / E
  • Meslek Serbest
  • Konum İstanbul Anadolu
  • Ad Soyad C** E**
  • Mesajlar 367
  • Beğeniler 69 / 147
  • Ticaret 0, (%0)
Bunu neden klasik query gönderimi ile yapmıyorsunuz.
İf(koşullar)
$Sira= "desc"
$Query="sorgular"
Elseif(koşullar)
$Sira="asc"
$Query="sorgular"

"Select ..... Where $Query $Sira "

Gibi..bu kullanım daha hoş olur. Genelde sorguda if kullanımı yavaşlatır(kayıt sayısına göre drğişir, minimal olsada farkeder).
Sorguyu dışarıda halledip göndermek en mantıklı seçim olur diye düşünüyorum.

Edit: where koşulunuzun sonuna order by product asc/desc isteğe göre a/z z/a dizilimi yapabilirsiniz. Sorguda sıkıntınız yoksa order by ile dizilimi seçin yeterli. Tabi doğru anladıysam :)
BEYAZMASTER

kişi bu mesajı beğendi.

İmkansız olduğunu düşünürsen hiç birşey başaramazsın.

BEYAZMASTER BEYAZMASTER YÜCE ALLAH'IN aciz 1 kulu Kullanıcı
  • Üyelik 04.02.2020
  • Yaş/Cinsiyet 43 / E
  • Meslek Yazılım...
  • Konum Diğer
  • Ad Soyad O** B**
  • Mesajlar 597
  • Beğeniler 154 / 153
  • Ticaret 0, (%0)
AzveNet cevabınız için teşekkür ederim üstadım.

"Sorguyu dışarıda halledip göndermek en mantıklı seçim olur diye düşünüyorum."

Kulağa hoş geliyor...

Fakat kasdettiğiniz yöntemi tam anladığımı söyleyemem.

Vaktiniz olursa tam bir kod örneği olarak paylaşabilir misiniz mümkünse...
 

 

ÖNCE "İYİ,DOĞRU,GÜZEL BİR İNSAN" OLMAK (VEFA,TEVAZZU,NAİFLİK,SAYGI,...) GEREK!
Sonra wm oluruz.

AzveNet AzveNet WM Aracı Kullanıcı
  • Üyelik 13.06.2019
  • Yaş/Cinsiyet 43 / E
  • Meslek Serbest
  • Konum İstanbul Anadolu
  • Ad Soyad C** E**
  • Mesajlar 367
  • Beğeniler 69 / 147
  • Ticaret 0, (%0)
Aslında tam olarak onu yapmıştım yukarıda üstadım :)
Uzun uzun yazmadım sadece.

İf ($yerlimali=="evet" {
$sorgu = " and product_by = 'made in TÜRKİYE' ";
$dizilim = " order by product_by desc";
}Elsr{
$sorgu = " and product_by = 'made in ITALY' ";
$dizilim = " order by product_by asc";
}

$anasorgu= select * from urunler where status = 1 $sorgu . $dizilim


Şeklinde düşünün. Standart where koşulu status(ben salladim bunu) ardına arama sorgumuzu ve dizilim şeklimizi if den aldığımız haliyle koyup değişen bir sorgu üretmiş oluyoruz. Buradaki $sorgu ve $dizilimi sabitte yapabilirsiniz isterseniz. Veya bir yerden alabilirsiniz bu değerleri. Bu şekilde istenen ülke ürününü alırız. Desc / asc ilede dizilim şeklini seçiyoruz.
BEYAZMASTER

kişi bu mesajı beğendi.

İmkansız olduğunu düşünürsen hiç birşey başaramazsın.
Site Ayarları
  • Tema Seçeneği
  • Site Sesleri
  • Bildirimler
  • Özel Mesaj Al