Autor Zpráva
lukasik
Profil
Mám dvě tabulky

1. záznamy [id,name, ..]
2. prémium [id_záznamu, expirace, ..]

A potřebuji vytvořit dotaz, který vybere všechny záznamy, které odpovídají podmínce a náhodně seřadí ty záznamy, které mají záznam v tabulce prémium a pak vybere všechny, které nemají záznam v prémium, seřadí je náhodně a vybere jich X-počet vrácených záznamů s prémiem

Takže potřebuji spojit tyto dotazy do sebe
SELECT * FROM záznamy WHERE id IN (SELECT id FROM premium WHERE expires > NOW())  AND podmínka ORDER BY RAND()
SELECT * FROM záznamy WHERE id NOT IN (SELECT id FROM premium WHERE expires > NOW())  AND podmínka ORDER BY RAND() 
LIMIT 10-countZprvníhoDotazu
Kajman
Profil
SELECT DISTINCT z.*
FROM   záznamy z
       LEFT JOIN premium p
              ON z.id = p.id
                 AND p.expires > Now()
WHERE  podminka
ORDER  BY p.id IS NULL,
          Rand()
LIMIT  10

Ale rychlé to (hlavně díky rand) nebude.
lukasik
Profil
Díky, tohle mě nenapadlo
ORDER  BY p.id IS NULL,

Bude to zdržení citelné při práci s řádově stovky záznamy? Předpokládám, že bych se neměl dostat nad 1k

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: