Mövzu üzrə bənzər suallara da baxa bilərsiniz.

MySQL Azərbaycan əlifbası sıralaması

Salamlar. mysql də select order by Azərbaycan əlifbasına görə sıra sıralamanı hansı yolnan eləmək olar?
normalda order by collate charset verməklə edilir ama azərbaycan charseti yoxdu mysql də. utf8_turkish_ci var oda bizim əlifbanı düz sıralamır. 1-2 yol fikirləşib elədim ama tam nəticə vermədi. bir table yaradıb letter order sutunlari olan. Azərbycan hərflərini həmən cədvəldə məs azeri_letters saxlayıb order də sıralamanı verib hər hər hansı başqa cədvəli select eləyəndə ilk hərfi substr eləyib azeri_letter ile join edib order i vermək. burda ama ilk hərfləri sıralayır. ama 2 və sonrakı hərflərdə uje qarışır. Nə təklif edə bilərsiniz bunun üçün. Təşəkkürlər


Sualı yadda saxla
Kateqoriya: Sual . , , . Qısa keçid.

Verilmiş cavablar və yazılan şərhlər (11 cavab var)

(01:21, 31/10/2020 ) #78107

Multibyte charsetlər var mysql-də.
Məs. istifadə elədiyim charset – utf8mb4_unicode_520_ci

Cavablamaq üçün sağ sütundan hesaba daxil olmaq lazımdır

    (01:23, 31/10/2020 ) #78108

    Təşəkkürlər. Bunu order eləyəndə collate olaraq vermeəliyəm yoxsa table ları yaradanda charset olaraq da bunu verməliyəm?

    Cavablamaq üçün sağ sütundan hesaba daxil olmaq lazımdır

      (10:21, 31/10/2020 ) #78109

      Yox query-də heç bir şey etmək lazım deyil. Adicə default orderby işləyər. Sadəcə mysqldə lazımi sütunu yaradarkən düzgün chatset seçmək bəs edər

      Cavablamaq üçün sağ sütundan hesaba daxil olmaq lazımdır

      (00:44, 01/11/2020 ) #78110

      Alınmadı ama. table create query aşağıdakı kimidir. select query də qeyd edirəm aşağıda.
      ə ı ü ş ğ bu hərfləri düzgün sıralaylr ama hansl ki ingilis əlifbası ilə eyni olan lakin bizde orderi fərqli olan hərfləri ingilis əlifbasına görə sıralayır. Məsələn x h dan sonra gəlməlidi ama sonda y dən əvvəl gəlir

      CREATE TABLE `references` (
        `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
        `name` varchar(191) COLLATE utf8mb4_unicode_520_ci NOT NULL,
        `surname` varchar(191) COLLATE utf8mb4_unicode_520_ci DEFAULT NULL,
        `father_name` varchar(191) COLLATE utf8mb4_unicode_520_ci DEFAULT NULL,
      ) ENGINE=InnoDB AUTO_INCREMENT=1057 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;
      
      select * from `references` order by `name` collate utf8mb4_unicode_520_ci;
      

      Mysql version mysql Ver 8.0.19 for osx10.15 on x86_64

      Cavablamaq üçün sağ sütundan hesaba daxil olmaq lazımdır

(13:54, 03/11/2020 ) #78114

Bəlkə output nümunə qoyasınız daha aydın olsun deyə.
Azərbaycan əlifbasının spesifikasını mysql bilmir deyə ola bilər belə kiçik fərq. Amma yenə də output sample görsəm daha çox demək olar.

Cavablamaq üçün sağ sütundan hesaba daxil olmaq lazımdır

    (15:20, 03/11/2020 ) #78117

    Sample data ve query burda əlavə etmişem

    həm tək hərfləri order verəndə düz çıxmır həmdə datanı.

    Cavablamaq üçün sağ sütundan hesaba daxil olmaq lazımdır

      (03:21, 04/11/2020 ) #78118

      İndi aydındır.

      X hərfi ilə yanaşı yəqin ki problem Q hərfi ilə də olacaq.
      Burada təqsir mysql charsetdə yox, bizim əlifbadadır. Ümumi latın ardıcıllıq prinsipinə riayət edilməyib deyə, xüsusi azeri charset olmadan q və x hərfləri həll olmaz.

      Sizin hal üçün alternativ kimi iki həll demək olar.

      1. mysql-də bir rəqəm sütunu yaradın, kod tərəfdə də hər kəsin adının baş hərfini ora yazmaq, əlifbamızdakı tutduğu mövqeyə uyğun Məsələn Əli – 7, Ayxan – 1, Bənövşə, 2 və.s.
      Ondan sonra da orderby-ı həmin sütuna görə vermək.

      2. Bir də mysql-in özü ilə daha sadə yolla həll etmək. FIELD() funksiyası ilə.

      Məsələn,

      select substr(name,1,1) ilkherf, name 
      from ADLAR 
      having ilkherf in ('A', 'B', 'C', 'Ç') 
      order by FIELD(ilkherf, 'A', 'B', 'C', 'Ç');
      

      Siz nümunədəki ‘A’, ‘B’, ‘C’, ‘Ç’ əvəzinə tam əlifbanı yazmalısınız təbii ki.

      Belə olan halda mysql məcbur qalacaq ki sırf sizin custom sıralama ilə orderby eləsin.

      Cavablamaq üçün sağ sütundan hesaba daxil olmaq lazımdır

(10:30, 04/11/2020 ) #78119

Çox təşəkkür edirəm izah üçün. Bəli problem bizim əlifbanın ingilis əlifbasına nisbətən hansı hərf orderi fərqlidirsə problem həmən hərflərdə baş verir. Qeyd etdiyiniz üsul ilə eləmişdim. Düzdü sıralayır ama sadecə ilk hərflə görə. Normalda mysql özü order eləyəndə sözdə olan hərflərin levellara görə order edir. İlk hərf eynidirsə keçir 2 ci hərfləri müqayisə edir. Ama bu numunələrdə ilk hərfi eyni olan 2 ci hərfi deyək ki x olan digər 2 ci hərfi m olan sözdən sonra gələcək. Halbu ki əvvəl gəlməlidi. Başqa bir variant gəlib ağlıma ama test etməmişəm bilmirəm nə dərəcədə effektiv olar. Test edib nəticəni yazacam

Cavablamaq üçün sağ sütundan hesaba daxil olmaq lazımdır

    (10:46, 04/11/2020 ) #78120

    Əgər söhbət ədəd analoq sütundan gedirsə və hər ad üçün çəki müəyyən edilirsə, o da çox asandır, yəni bütöv söz üzrə orderby.
    Mən yuxarıda yazan nümunədə funksiya score-u belə hesablayırdi
    Ilk hərf = sıra nömrəsi.

    Onun əvəzində başqa funksiya edə bilərsiz, kiçik sadə php funksiya.

    Ilk hərf = 32*SIRA
    Ikinci hərf = 32*SIRA/33
    Üçüncü hərf = 32*SIRA/(33*33)
    Və.s.

    Alınan ədədlərin uzun yazılışli olmaması üçün hər hansı riyazi normalisation operator funksiyası da istifadə etmək olar. Ki store ediləcək ədəd uzun kəsr və ya çox böyük ədəd olmasın.(performansi salmamaq üçün)

    Cavablamaq üçün sağ sütundan hesaba daxil olmaq lazımdır

      (12:43, 04/11/2020 ) #78121

      Belə bir yolla elədim. Düzgün sıralayır. string tipinde bir order column yaradırıq table da.

      elementi save və update eləyəndə ad sahəsini aşağıdakı funksiyada keçirib nəticəni set edirəm order ə və select eləyəndə orderə görə sıralayıram.

          function getOrderByAzeriLetters($str) {
              $captures = ['x' => 'h1', 'q' => 'k1'];
              $str = mb_strtolower(trim($str));
              $str = str_replace(array('(', ')', ' '), '', $str);
              $letters = str_split($str);
              $order = '';
              foreach($letters as $char) {
                  if(array_key_exists($char, $captures)) {
                      $order .= $captures[$char];
                  } else {
                      $order .= $char;
                  }
              }
              return $order;
      
          }

      bir neçə dəfə test elədim səhf nəticə verən halla rastlaşmadım.

      Cavablamaq üçün sağ sütundan hesaba daxil olmaq lazımdır

(17:36, 04/11/2020 ) #78122

Mən yazdığım kimi eləyəndə stabil işləmədi. Bir yerlərdə düzgün order eləmir. Sizin qeyd etdiyiniz kimi elədim işlədi tam dəqiq. Təşəkkür edirəm. Çox sağolun. Mysql də column string tipində eləyib order column nu order by verəndə integer ə cast elədim.

Cavablamaq üçün sağ sütundan hesaba daxil olmaq lazımdır

Cavab verin


Cavab yazmaq üçün lütfən sağ sütundan və ya buradan hesaba daxil olun.

Üzvlər üçün giriş

Qeydiyyat

Elan qutusu

Son cavablar və şərhlər

Kenikeni cavab verdi - Qara siyahıda olan IMEI (19 saat əvvəl)

niftaliyev cavab verdi - Adıma olan nömrələri öyrənmək istəyirəm (2 gün əvvəl)

Şükür Hüseynov cavab verdi - Adıma olan nömrələri öyrənmək istəyirəm (5 gün əvvəl)

Şükür Hüseynov cavab verdi - Ev nömrəmi hardan öyrənə bilərəm? (5 gün əvvəl)

Şükür Hüseynov cavab verdi - 1-ci qrupa informatika lazımdır? (5 gün əvvəl)

Maqa cavab verdi - Qara siyahıda olan IMEI (5 gün əvvəl)

Maqa cavab verdi - Aliexpresdən sifariş olur? (5 gün əvvəl)

E. Hacı cavab verdi - Amerikanın B&H saytından başqa heç bir sayt sifarişimi qəbul etmir. (7 gün əvvəl)

Linda8 cavab verdi - İnternetə qoşulma (8 gün əvvəl)

Gunash cavab verdi - Modemi nece sazlayım? (9 gün əvvəl)

niftaliyev cavab verdi - İnternetə qoşulma (9 gün əvvəl)

niftaliyev cavab verdi - İş vizası Avropa (9 gün əvvəl)

niftaliyev cavab verdi - Modemi nece sazlayım? (9 gün əvvəl)

Jamshid cavab verdi - "Outlook və Gmail"də E-poçt hesabı açan zaman veb saytda olan bu məlumatları oxumaq lazımdır, ehtiyac var? (9 gün əvvəl)

Jamshid cavab verdi - Fransız dili üzrə Test Toplusu (9 gün əvvəl)

Software Developer - 611 xal

E. Hacı - 604 xal

Onar Alili - 526 xal

Dilsuz - 448 xal

Cabbarov Sübhan - 432 xal

Maqa - 346 xal

Ruslan Butdayev - 328 xal

Namiq Bəndəli - 297 xal

U.Tarlan - 244 xal

Meherremoff - 234 xal

Sistemə daxil olmuş 22247 sualdan 92%-dən çoxu cavablandırılmışdır.

Proyekt haqqında

E-Haci.net istehsalı. © 2010-2020