Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MYSQL] Optymalizacja zapytania
--void--
post
Post #1





Goście







Witam.
Mam taki problem z optymalizacją zapytania.
Moja struktura bazy schematycznie wygląda tak:
produkty (id auto increment, describe_short - typ int, name_short - typ int, describe_long - typ int, jeszcze jakieś nieistotne pola...)
describe_varchar (id - typ int, describe - typ varchar(30) )
describe_text (id - typ int, describe - typ text)

W tabeli `produkty` przechowuję tylko liczby (takie jest założenie). Kolumna describe_short przechowuje liczbę, pod którą w tabeli describe_varchar można znaleźć krótki opis produktu (maksymalnie 30 znaków). Kolumna name_short również przechowuje klucz obcy dla tej tabeli, jednak nieco inne jest jej zastosowanie (nie jest to istotne). Tabele describe_varchar i describe_text składają się z zestawów id-ciąg tekstowy, w przypadku describe_varchar jest to 30 znaków, w przypadku describe_text - dłuższe teksty.
Chciałbym jednym zapytaniem pobrać wszystkie opisy wszystkich produktów (czyli pobrać dla każdego produktu jego krótki opis, nazwę (pole name_short) oraz dłuższy opis. Nie chcę zmieniać struktury bazy, bo to co przedstawiłem to nie cała aplikacja i zmiana struktury miałaby znacznie poważniejsze konsekwencje. Napisałem taki kod:
  1. <?php
  2. function getProductsProperties()
  3. {
  4. $query = "SELECT dv.describe, dt.describe FROM produkty AS p, describe_varchar AS dv,
     describe_text AS dt WHERE "
    ;
  5. $query .= "(p.describe_short=dv.id OR p.name_short=dv.id) AND p.describe_long=dt.id";
  6. $result = mysql_query($query);
  7. if (!$result || !mysql_num_rows($result))
  8. {
  9. return false;
  10. }
  11. $i = 0;
  12. while ($row = mysql_fetch_row($result))
  13. {
  14. if (!($i%2))
  15. {
  16. $array['descShort'][] = $row[0];
  17. $array['descLong'][] = $row[1];
  18. }
  19. else
  20. {
  21. $array['name'][] = $row[0];
  22. }
  23. $i++;
  24. }
  25. return $array;
  26. }
  27. ?>

Ale chciałbym, żeby już mysql_fetch_row bądź mysql_fetch_array zwracało poprawną tablicę. Przy tak sformułowanym zapytaniu wyników w tabeli $array['descLong'] mam 2 razy za dużo (po 2 razy te same), co jest zresztą logiczne, patrząc na warunki - (coś1 OR coś2) AND coś3 powoduje że coś3 występuje dwukrotnie więcej niż powinno. Może jakiś inny sposób łączenia tabel? Nie widzi mi się sprawdzanie reszty z dzielenia iteratora przez 2, jak w powyższym przykładzie sad.gif
Mam nadzieję że dobrze opisałem problem i że nie jest on zbyt trudny dla Was...
Z góry dzięki za pomoc.
Go to the top of the page
+Quote Post

Posty w temacie
- -void-   [PHP][MYSQL] Optymalizacja zapytania   8.05.2008, 16:41:52
- - phpion   Możesz dać SELECT DISTINCT... ale z tego co widzę ...   8.05.2008, 17:13:03
- - -void-   Nie rozumiem, co znaczy `analogiczny` Kom...   8.05.2008, 19:57:42


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 10:10