SELECT *
FROM fixed_questions
WHERE examid = 15
ORDER BY RAND() LIMIT 1
UNION ALL
SELECT *
FROM questions
WHERE examid = 15
ORDER BY RAND() LIMIT 4;
To jest moje zapytanie, a także próbuję tego kodu. Czy można to zrobić, może nie jestem pewien, czy unia działa, czy nie dla mysql. Głównym problemem jest przypadkowa wartość jedna tabela otrzymuje 1, a inna tabela otrzymuje 4 (to moja logika). Jak to zrobić
SELECT *
FROM v_fixed_questions vf
,v_questions vq ON (vf.examid = vq.examid)
Odpowiedzi:
0 dla odpowiedzi № 1Myślę, że głównym problemem jest to, aby użyć LIMIT
ze związkiem musi znajdować się w faktycznym podzapytaniu, a nie na poziomie zewnętrznym. Możliwe jest użycie LIMIT
na końcu kwerendy związkowej, ale wówczas dotyczyłaby całego zestawu wyników unii, a nie jednego z podkwerend.
(
SELECT *
FROM fixed_questions
WHERE examid = 15
ORDER BY RAND()
LIMIT 1
)
UNION ALL
(
SELECT *
FROM questions
WHERE examid = 15
ORDER BY RAND()
LIMIT 4
);
Ta odpowiedź zakłada, że fixed_questions
i questions
tabele mają tę samą liczbę kolumn (najlepiej tego samego typu). Jeśli nie, prośba o połączenie dwóch pełnych tabel może nie mieć sensu.