• 26-01-2013, 00:45:33
    #1
    Merhaba, aşağıdaki şekilde bir sorgum var. İçinde arama yapılan sütunlar sutun1 ve sutun2

    Yani arama yapıldığı zaman 3 farklı tabloda da arama yaptırıyorum fakat revelance da eklemem gerekiyor mesela having revelance > 0.3 gibi. Veya diğer having durumlarını. Fakat bir türlü oturtamadım şablonu. Manuel ve diğer örneklerdekiler hep hata verdi. Nasıl yapmam gerekiyor? Yani 0.3'ten büyük eşleşmeleri istiyorum.

    ORJİNAL ÇALIŞAN SORGU:

    SELECT * FROM (
    select column1,column2,column3 from tablo1 where match(sutun1,sutun2) against("aranan"  IN BOOLEAN MODE)
    UNION
    select column1,column2,column3 from tablo2 where match(sutun1,sutun2) against("aranan"  IN BOOLEAN MODE) 
    UNION
    select column1,column2,column3 from tablo3 where match(sutun1,sutun2) against("aranan"  IN BOOLEAN MODE) 
    ) as temptable group by id limit 20
  • 26-01-2013, 10:51:58
    #2
    Aşağıdaki koda evirdim fakat syntax hatası veriyor, %99 newscore u tanımıyor, nasıl çözülebilir?

    Alıntı
    #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'group by id limit 20'
    Alıntı
    SELECT derivedtable.* FROM (

    select column1,column2,column3 match(sutun1,sutun2) against('aranan' IN BOOLEAN MODE) AS newscore FROM tablo1 where match(sutun1,sutun2) against('aranan' IN BOOLEAN MODE)

    union

    select column1,column2,column3 match(sutun1,sutun2) against('aranan' IN BOOLEAN MODE) AS newscore FROM tablo2 where match(sutun1,sutun2) against('aranan' IN BOOLEAN MODE)

    ) as derivedtable order by newscore DESC group by id limit 20
    order by yerine having newscore >0.3 de aynı hatayı veriyor
  • 26-01-2013, 11:35:25
    #3
    Kimlik doğrulama veya yönetimden onay bekliyor.
    Select * ile having veya group by kullanamazsın. Aggreage function hatası alırsın.
    Şu şekilde dene bakalım.
    SELECT derivedtable.id, derivedtable.newscore FROM (
    select column1,column2,column3 match(sutun1,sutun2) against('aranan' IN BOOLEAN MODE) AS newscore FROM tablo1 where match(sutun1,sutun2) against('aranan' IN BOOLEAN MODE)
    union
    select column1,column2,column3 match(sutun1,sutun2) against('aranan' IN BOOLEAN MODE) AS newscore FROM tablo2 where match(sutun1,sutun2) against('aranan' IN BOOLEAN MODE)
    ) as derivedtable order by derivedtable.newscore DESC group by derivedtable.id, derivedtable.newscore limit 20
  • 26-01-2013, 12:12:31
    #4
    Yine aynı hata.

    Alıntı
    order by derivedtable.newscore DESC
    kısmını çıkarınca normal sorgu gerçekleşiyor fakat newscore değerini kullanmak isteyince;

    Alıntı
    Alıntı
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'group by derivedtable...
  • 26-01-2013, 12:20:36
    #5
    Order by'ı sona al. Group by'dan sonra kullanılır çünkü.
  • 26-01-2013, 12:25:17
    #6
    Şöyle düzeldi:

    - derivedtable'da yine * ile seçim yaptım çalıştı
    - having newscore / order by filtrelerini en dıştaki değil içteki sorguya ekledim.

    Çalışan kod:

    Alıntı
    SELECT * FROM (

    (select column1,column2,column3 match(sutun1,sutun2) against('aranan' IN BOOLEAN MODE) AS newscore FROM tablo1 where match(sutun1,sutun2) against('aranan' IN BOOLEAN MODE) order by newscore)

    union

    (select column1,column2,column3 match(sutun1,sutun2) against('aranan' IN BOOLEAN MODE) AS newscore FROM tablo2 where match(sutun1,sutun2) against('aranan' IN BOOLEAN MODE) order by newscore)

    ) as derivedtable group by id limit 20
  • 26-01-2013, 12:48:40
    #7
    Senin iç sorgunda tek değer geliyorsa group by çalışır evet ama tek değer gelmezse dediğim gibi aggregate function hatası alırsın. Çünkü neyi neyle birleştireceğini bilemez. Sorgunun sonucunu buraya yazar mısın.
  • 26-01-2013, 13:25:38
    #8
    birden fazla sonuç dönüyor hatasız.

    Çünkü şöyle bir durum var, hangisi kümeden hangisini çekmek istememizle alakalı.

    Order yapılmış sonuçtan gruplama yapmak istedim. Aksi mantıksız olmaz mı? grupladıktan sonra order yaparsak score u düşük bir kayıt grup lideri olabilir.