Autor Zpráva
jval
Profil *
Zdravím, mám takovýto SQL dotaz:
    $sql = "SELECT p.*,p.id as pid,l.*,u.realname,i.*,r.title as region, c.title as city
            FROM " . $db_prefix . "products p
                LEFT JOIN " . $db_prefix . "products_lang l
                ON p.id=l.product_id
                LEFT JOIN (SELECT product_id,image as image
                    FROM " . $db_prefix . "products_images
                                        ORDER BY ord) i
                ON p.id = i.product_id
                LEFT JOIN " . $db_prefix . "cities_lang c
                ON p.city_id=c.city_id
                LEFT JOIN " . $db_prefix . "users u
                ON p.user_id=u.id
                LEFT JOIN (SELECT rr.id as rr_id,rl.title
                    FROM " . $db_prefix . "regions rr
                        LEFT JOIN " . $db_prefix . "regions_lang rl
                        ON rr.id = rl.region_id) r
                ON r.rr_id = p.region_id
            WHERE l.lang='" . $LANG . "' AND p.deleted=0 " . $filter . "
            GROUP BY p.id
            ORDER BY " . $order . "
            LIMIT " . $limit . "
            OFFSET " . $offset . "";
Do přesunu na nový hosting vše fungovalo jak má, ale po přesunu mi do image naplni obrazek nahodne misto toho aby vzal prvni podle ORDER BY ord. Dá se ten JOIN nějak omezit aby vždy vybral pouze obrázek s nejnižší hodnotou ve sloupci ord.

Díky
Kajman
Profil
jval:

Musíte si pro každý produkt najít nejmenší ord viz. třetí příklad z faq. A následně podle produktu a ord připojit odpovídající obrázek.
jval
Profil *
Tak jsem to nakonec vyřešil subselectem místo JOINu
    $sql = "SELECT p.*,p.id as pid,l.*,u.realname,r.title as region, c.title as city, (SELECT image FROM " . $db_prefix . "products_images
                            WHERE p.id = product_id 
                            ORDER BY ord
                            LIMIT 1) AS image
            FROM " . $db_prefix . "products p
                LEFT JOIN " . $db_prefix . "products_lang l
                ON p.id=l.product_id
                LEFT JOIN " . $db_prefix . "cities_lang c
                ON p.city_id=c.city_id
                LEFT JOIN " . $db_prefix . "users u
                ON p.user_id=u.id
                LEFT JOIN (SELECT rr.id as rr_id,rl.title
                    FROM " . $db_prefix . "regions rr
                        LEFT JOIN " . $db_prefix . "regions_lang rl
                        ON rr.id = rl.region_id) r
                ON r.rr_id = p.region_id
            WHERE l.lang='" . $LANG . "' AND p.deleted=0 " . $filter . "
            GROUP BY p.id
            ORDER BY " . $order . "
            LIMIT " . $limit . "
            OFFSET " . $offset . "";

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: