Mysql
 sql >> база данни >  >> RDS >> Mysql

извлича запис в ред с клауза IN - има дублирани стойности в клауза IN

Логично не е възможно да направите това, което искате, ще се опитам да обясня, използвайки вашия избор на поръчка

 ORDER BY FIELD(`question_level`, 1, 2, 1, 2, 3, 2, 4, 2, 3, 3)

Така че тук искаме 1 след това 2 след това 1 отново от question_level . Сега в таблицата имаме тези стойности. Ще се занимавам само с question_level #1, което е всичко, от което се нуждая, за да покажа мнението си.

id   | question    | question_level
______________________________________
1    | abc         | 1
______________________________________
5    | qoindos     | 1
______________________________________

Както можете да видите, имаме редове за question_level=1 Сега как системата ще реши кое ниво 1 е първо и кое е второ. Няма начин да решите как да направите това. Така че независимо от това, че базата данни не успява да я сортира по начина, по който искате. Без повече информация, за да направите този избор, няма начин да се конструира цикъл дори за сортиране на това. Най-доброто, което можете да направите, е да сортирате по първичния ключ и след това по нивото. Което най-вероятно ще трябва да направите от страната на сървъра.

Мисля, че грешката, която направихте тук, е, че трябва да използвате действителния уникален идентификатор на въпросите, ако имате ограничения за броя въпроси на всяко ниво, това трябва да се разгледа отделно.

Надяваме се, че това има смисъл.

Ако се опитвате да изберете x брой произволни въпроси при n ниво, което може да се изработи доста лесно. Например, ако искате

  • 2 пъти въпроса на ниво 1
  • 4 пъти въпроси на ниво 2
  • 3x въпроса на ниво 3
  • 1x въпроси на ниво 4.

Това може да се направи с четири прости заявки за нивото, като същевременно сортирате на случаен принцип в полето id и използвате подходяща лимитна клауза за това ниво. Между другото, това са номерата на нивата във вашия въпрос.

АКО искате да изберете произволни въпроси на дадено ниво, може да искате да го направите с подзаявка. RAND() има някои наказания за производителност, които трябва да можете да заобиколите, като просто рандомизирате първичния ключ и след това се присъедините към таблицата, за да изтеглите останалите данни, след като бъдат подредени. Но трябва да го сравните.

Така че пример за това би бил този.

SELECT
    q1.*
FROM 
    tbl_questions AS q1
JOIN
(
    SELECT
        id
    FROM
        tbl_questions
    WHERE
        question_level = 1
    ORDER BY RAND() LIMIT 2
) AS q2 USING( id )

Въпреки че трябва да призная, че никога не съм опитвал това, просто имах идея.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL грешка № 121

  2. mySQL заявка - показва най-популярния елемент

  3. Как мога да конвертирам условно агрегиране mysql в laravel заявка?

  4. Как да дублирам MySQL база данни на същия сървър

  5. Съхраняване на идентификационни данни на MS SQL Server в база данни на MySQL