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:
<?php function getProductsProperties() { $query = "SELECT dv.describe, dt.describe FROM produkty AS p, describe_varchar AS dv,
describe_text AS dt WHERE "; $query .= "(p.describe_short=dv.id OR p.name_short=dv.id) AND p.describe_long=dt.id"; { return false; } $i = 0; { if (!($i%2)) { $array['descShort'][] = $row[0]; $array['descLong'][] = $row[1]; } else { $array['name'][] = $row[0]; } $i++; } return $array; } ?>
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

Mam nadzieję że dobrze opisałem problem i że nie jest on zbyt trudny dla Was...
Z góry dzięki za pomoc.