Prodej projektu Duchod.cz - SLEVA
Zobrazují se odpovědi 1 až 6 z 6

Výber dát z 3 tabuliek - veľká záťaž

  1. Potreboval by som poradiť.

    Z dvoch tabuliek si bez problémov vytiahnem dáta a zobrazia sa mi na stránke.

    Syntax je takáto:

    Kód:
    $sql = 'SELECT oc_product_description.product_id, oc_product_description.name, 
    oc_product_description.tag, oc_product.model, oc_product.price
    FROM oc_product_description, oc_product
    WHERE oc_product_description.product_id = oc_product.product_id
    ORDER BY oc_product_description.product_id ASC';
    Takže z tabuľky oc_product_description vyťahujem ID produktu, názov, kľúčové slovo
    Z tabuľky oc_product vyťahujem model a cenu

    Tento skript mi z databázy vytiahne okolo 8000 položiek za 2 sekundy.

    Ale ja potrebujem vytiahnuť dáta len z určitej kategórie, napr. z kategórie č. 11 a tieto dáta sa nachádzajú v tretej tabuľke, ktorú musím do skriptu pridať.

    Tak syntax som upravil takto:

    Kód:
    $sql = 'SELECT oc_product_description.product_id, oc_product_description.name, 
    oc_product_description.tag, oc_product.model, oc_product.price, 
    oc_product_to_category.category_id
    FROM oc_product_description, oc_product, oc_product_to_category
    WHERE oc_product_description.product_id = oc_product_to_category.product_id 
    AND oc_product_to_category.category_id = 11
    ORDER BY oc_product_description.product_id ASC';
    Pribudol stĺpec oc_product_to_category.category_id, tabuľka oc_product_to_category a riadok WHERE som upravil tak ako som upravil a zrejme tu bude problém (vrátane riadku AND). Totiž až táto syntax mi zobrazuje položky z kategórie 11, čo je asi 300 položiek, problém však je, že z nejakého dôvodu sa stránka dlho načítava a buď skončí hláškou MySQL server has gone away alebo stránka sa načíta správne až za minútu s požadovanými dátami, ale Firefox dovtedy zožerie celú pamäť a padne.

    Nevie niekto kde by mohol byť pes zakopaný?

  2. Co se právě děje na Webtrhu?
  3. Je tam kartézský součin na oc_product_description, oc_product. Musíš ty tabulky propojit. Zhruba takto:
    $sql = 'SELECT oc_product_description.product_id, oc_product_description.name,
    oc_product_description.tag, oc_product.model, oc_product.price,
    oc_product_to_category.category_id
    FROM oc_product_description, oc_product, oc_product_to_category
    WHERE oc_product_description.product_id = oc_product_to_category.product_id AND oc_product.product_id = oc_product_description.product_id
    AND oc_product_to_category.category_id = 11
    ORDER BY oc_product_description.product_id ASC';

  4. Perfektné, ďakujem!


    Teraz keď na to pozerám, ja som vlastne išiel tou istou cestou, len som do syntax dával

    WHERE oc_product_description.product_id = oc_product_to_category.product_id AND oc_product_to_category.category_id = 11

    alebo

    oc_product.product_id = oc_product_description.product_id AND oc_product_to_category.category_id = 11

    ale nenapadlo mi to prepojiť všetko dokopy. Už budem vedieť ;)

  5. - Napište ty JOINy explicitně
    - Oddělte podmínky pro JOIN a podmínky pro WHERE
    - Použijte aliasy
    - Dotaz zarovnejte, ať se lépe čte

    Kód:
    SELECT
      d.product_id,
      d.name,
      d.tag, 
      p.model, 
      p.price,
      c.category_id
    FROM oc_product_description AS d
      LEFT JOIN oc_product AS p USING (product_id)
      LEFT JOIN oc_product_to_category AS c USING (product_id)
    WHERE c.category_id = 11
    ORDER BY d.product_id ASC

  6. Díki, vyzerá to dobre. Ja hlavne testujem, čoho som schopný. Pred chvíľou som si vytvoril stránku a z menu si vyberám z ktorej kategórie chcem zobrazovať položky. Zatiaľ všetko funguje.

  7. A hlavne pri navrhu databazy pouzivaj PRIMARY a FOREIGN KEY v jednotlivych tabulkach a ak chces vyhladavat podla inych stplcov tak aj indexi a dotazy ti miesto sekund budu bezat v miliseknudach, bez tohto sa totiz pri vacsich DB nepohnes a budu prakticky nepouzitelene.

Hostujeme u Server powered by TELE3