Napiszę w skrócie o co chodzi:
Mam takie zapytanie:
SELECT m.id, n.nazwa miejscowosc, o.id, o.nazwa FROM miejscowosci m LEFT JOIN miejscowosci_nazwa n ON n.m_id = m.id AND n.j_id = '1' LEFT JOIN obiekty o ON o.miejscowosc = m.id GROUP BY m.id;
Chce z kazdej miejscowosci wyciagnac losowy obiekt. Nazwy miejscowosci przechowywane sa w drugiej tabeli (miejscowosci_nazwa) ze wzgledu na rozne nazewnictwo przy roznych wersjach jezykowych.
Problem polega na tym, ze nie wyciaga mi losowego obiektu, tylko zawsze pierwszy, ktory jest dodany do danej miejscowosci.
Podaje też kilka innych tasiemców, których próbowałem...:
SELECT m.id, n.nazwa miejscowosc, o.id, o.nazwa FROM miejscowosci m LEFT JOIN miejscowosci_nazwa n ON n.m_id = m.id AND n.j_id = '1' LEFT JOIN obiekty o ON o.miejscowosc = m.id AND o.id = ( SELECT id FROM obiekty WHERE miejscowosc = m.id ORDER BY RAND( ) LIMIT 1 ) GROUP BY m.id;
Działa prawie dobrze. Zwraca losowe obiekty przypisane do każdej miejscowości, ale czasami zamiast obiektu zwraca null...
Kolejny tasiemiec do kolekcji:
SELECT n.nazwa, m.id, o.id, o.nazwa FROM miejscowosci m LEFT JOIN miejscowosci_nazwa n ON n.m_id = m.id AND n.j_id = '1', obiekty o WHERE o.id = (SELECT id FROM obiekty WHERE miejscowosc = m.id ORDER BY RAND() LIMIT 1 ) GROUP BY m.id
Tym razem albo zwraca miejscowosc z losowym obiektem z tej miejscowosci, albo w ogole nie zwraca miejscowosci (pewnie to przez WHERE)