Mysql กับการค้นหาคำตอบเกี่ยวกับเรื่องการมีและนับ

0

คำถาม

ในนี่กับการค้นหา*ฉันรายการและเรียงลำดับแถวจาก"mytableabc"โดยเส้นรุ้ง,แส้นแวง,ต่าง criterias,...จากอยู่ใกล้ที่จะไกลหรือคะแนนและมันทำงาน/การเรียกรายการ datas และฉันคิดว่ามันดี/เร็ว enought!?

select 
round((6371 * acos(cos(radians('40.123456')) * cos(radians(latitude)) * cos(radians(longtitude) - radians('29.123456')) + sin(radians(latitude)) * sin(radians('40.123456')))), (2)) as distance, 
    (match(colone,coltwo) against('searchkeywordabc' in boolean mode)) as score, 
id,colone,coltwo,latitude,longtitude,colthree 
        from mytableabc 
        where (colone='sampleforsomething') 
            and (match(colone,coltwo) against('searchkeywordabc' in boolean mode))
                having distance <= 5 order by distance asc limit 0,50

--ปัญหา

ในบรรทัดต่างออกและแฟ้มที่ฉันต้องการแค่หมายเลขรวมนับได้(id)ของคืนส่วนประกอบกับเดียวกัน criterias... ฉันพยายามจะเพิ่มจำนวน(id)แต่มันไม่ทำให้ถูกต้องนับทั้งหมดและยังรายการบรรทัด, ฉันแค่ต้องการทั้งหมดตัวเลข(เป็นปกติแล้วนับการมัน)ไม่ใช่ข้อมูลของเส้น

select 
    count(id), 
round((6371 * acos(cos(radians('40.123456')) * cos(radians(latitude)) * cos(radians(longtitude) - radians('29.123456')) + sin(radians(latitude)) * sin(radians('40.123456')))), (2)) as distance, 
        (match(colone,coltwo) against('searchkeywordabc' in boolean mode)) as score, 
    id,colone,coltwo,latitude,longtitude,colthree 
            from mytableabc 
            where (colone='sampleforsomething') 
                and (match(colone,coltwo) against('searchkeywordabc' in boolean mode))
                    having distance <= 5 order by distance asc limit 0,50

--แล้วก็นี่ด้วยกับการค้นหาโดยไม่มีระยะห่าง/องเส้นรุ้ง/longtitude เงื่อนไขการเรียงลำดับทำงานดี,คืนเดียวทั้งหมดหลายกระบอก...แต่ฉันต้องการเพิ่มระยะห่างกับการค้นหาที่นี่ query

select count(id) from mytableabc where (colone='sampleforsomething') and (match(colone,coltwo) against('searchkeywordabc' in boolean mode))

ฉันไม่ใช่ภาษา sql นผู้เชี่ยวชาญและใช่อย่างที่คุณเห็นผมต้องการหนึ่ง ขอบคุณ

geolocation mariadb mysql php
2021-11-17 21:58:00
1

คำตอบที่ดีที่สุด

0

วางแผน:

ย้าย distance กาเลือกเพื่อนที่ WHERE เงื่อนไขว่า. นี่จะช่วยลดความต้องการสำหรับ HAVING ในขณะที่กำลังกรองมากกว่าดังนั้นนั่น COUNT ไม่ inflated.

select  count(*)
    from  mytableabc
    where  (colone='sampleforsomething')
      and  (match(colone,coltwo) against('searchkeywordabc' in boolean mode))
      AND  (6371 * acos(cos(radians('40.123456')) * 
        cos(radians(latitude)) * cos(radians(longtitude) -
        radians('29.123456')) + sin(radians(latitude)) *
        sin(radians('40.123456')))) < 5;

ฉันคาดหวัง FULLTEXT ดัชนีที่จะใช้ก่อนกับอีกสองคนทดสอบ(= และระยะไกล)เป็นกาเลือกสำหรับทุกแถวกลับมาจาก FT รค้นหา

แผน B:

ทำต่อไปที่จะใช้ HAVINGแต่มี subquery. (นี่คืออาจจะช้ากว่า)

2021-11-18 04:19:40

ฉันวิเคราะห์/benchmark และวางแผนที่เลือกไว้ ขอบคุณสำหรับตอบกลับเร็ว
evet

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่