• 29-04-2024, 20:17:15
    #1
    İyi akşamlar arkadaşlar, bir konuda yardımınıza ihtiyacım var. Şimdiden yardımlarınız için teşekkür ederim.

    3 Sütundan oluşan bir veritabanım var. (Code,Definition,Descr)

    Örnek Veritabanı;

    123456 / BİR ÜRÜNÜN TANIMI / Ürünün farklı açıklaması.
    123456 / BİR ÜRÜNÜN TANIMI / Ürünün farklı açıklaması.
    123456 / ÖTEKİ ÜRÜNÜN TANIMI / Açıklaması farklı ürün.
    654321 / BAŞKA ÜRÜNÜN TANIMI / Bir başka ürünün açıklaması.

    Burada amacım bir arama formu aracılığı ile bir anahtar kelimeyi "Descr" sütununda arayıp, en fazla eşleşmenin olduğu "Definition" sütununu ve "Code" unu alıp yazdırmak.

    Örnek Verecek olursak; form ile aradığım anahtar kelimem "ürünün" bana verilecek sonucun aşağıdaki gibi olması gerekiyor.

    Bu Veritabanında 4 satırın 3'ünde ürünün yazıyor.
    En Çok Bulunan kod; 123456
    En çok eşleşen Tanım; BİR ÜRÜNÜN TANIMI
    1. En çok eşleşen Açıklama; Ürünün farklı açıklaması.
    2. En çok eşleşen Açıklama; Bir başka ürünün açıklaması.

    Bu sonucu bir türlü alamadım, nasıl yapabilirim? yardımlarınız için teşekkür ederim.
  • 29-04-2024, 20:29:42
    #2
    WHERE SütunADI LIKE '%aranacak kelime%' ORDER BY id DESC
  • 29-04-2024, 20:35:27
    #3
    SELECT * FROM haberler WHERE haberler_durum = '1' AND baslik LIKE '%$kelime%' or icerik LIKE '%$kelime%' ORDER BY id DESC limit 10
    bu kod da bir tablodaki farklı sütunlarda aramanızı sağlar.
  • 29-04-2024, 20:45:35
    #4
    oktayc0 adlı üyeden alıntı: mesajı görüntüle
    WHERE SütunADI LIKE '%aranacak kelime%' ORDER BY id DESC
    Sıralamaya yarayacak bir ID yok ne yazıkki.
  • 29-04-2024, 20:49:58
    #5
    barisvehbi adlı üyeden alıntı: mesajı görüntüle
    Sıralamaya yarayacak bir ID yok ne yazıkki.
    id burada genel veritabanı yapısına göre temsilidir, buraya string içeren bir sütun verirseniz bu sefer alfabetik olarak sıralacayaktır.
  • 29-04-2024, 20:50:25
    #6
    PM ile ulaşın yardımcı olayım hocam.
  • 29-04-2024, 20:52:57
    #7
    ynscnr55 adlı üyeden alıntı: mesajı görüntüle
    SELECT * FROM haberler WHERE haberler_durum = '1' AND baslik LIKE '%$kelime%' or icerik LIKE '%$kelime%' ORDER BY id DESC limit 10
    bu kod da bir tablodaki farklı sütunlarda aramanızı sağlar.
    Farklı sütunlarda arama yapmam gerekmiyor aslında, sadece 3. sütunda arayacağım, kaç adet olduğunu sayacağım ve en fazla eşleşen 1. ve 2. sütunu yazacağım. örnek vermek gerekirse aşağıda veritabanı ve yazdırma alanının ekran görüntüsünü paylaşıyorum.

    Örneğin CARTONS yazıp aradım, sonuç şöyle olmalı; 3. sütunda CARTONS içerenleri bul, say, yazdır, en fazla hangisinde ise onun 1. ve 2. satırını yazdır.

    Veritabanı:

  • 29-04-2024, 21:34:05
    #8
    Aramayı sütuna göre yapın yazdırırken istediğiniz sütunu yazdırabilirsiniz sorun olmaz.
  • 29-04-2024, 23:25:31
    #9
    sql_mode=only_full_group_by ayarının default olduğunu varsayarak şu kodu yazıyorum:

    select max(Code) as Code, max(Definition), max(Descr), count(code) from test where Descr like '%CARTONS%' group by Code order by count(Code) DESC;
    Ekran çıktısı şöyle olur. En üste en çok CARTONS içeren veriyi koyar, sağlaması için count(code) ekledim.


    Bir tık performansa etki eder. Eğer sql_mode değeriniz içinde only_full_group_by yoksa sorgu daha basitleşir:
    select Code, Definition, Descr FROM test where Descr like '%CARTONS%' group by Code order by count(Code) DESC