Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Pobieranie danych rekurencyjnie z trzech tabel, kiedy jednemu rekordowi odpowiada więcej niż jedna dana
L_Devil
post
Post #1





Grupa: Zarejestrowani
Postów: 195
Pomógł: 0
Dołączył: 13.04.2004
Skąd: Łódź

Ostrzeżenie: (0%)
-----


Witam, mam trzy tabele:

Kod
main:
+---+----------+-----------+---
|id |   name   |   value   | ...
+---+----------+-----------+---
| 1 |  item1   |  value1   | ...
| 2 |  item2   |  value2   | ...
| 3 |  item3   |  value3   | ...
| 4 |  item4   |  value4   | ...
+---+----------+-----------+---

options:
+---+----------+-----------+---
|id |  owner   |   option  | ...
+---+----------+-----------+---
| 1 |     1    |     1     | ...
| 2 |     1    |     2     | ...
| 3 |     2    |     1     | ...
| 4 |     3    |     3     | ...
+---+----------+-----------+---

options_types:
+---+----------+-----------+---
|id |   nameX  |   valueX  | ...
+---+----------+-----------+---
| 1 |   opt1   |    val1   | ...
| 2 |   opt2   |    val2   | ...
| 3 |   opt3   |    val3   | ...
+---+----------+-----------+---
I teraz chciałbym, za pomocą jednego zapytania, wybrać wszystkie dane z tabeli main, tak, by do każdego id wybrać wszystkie dane z tabeli options o takim samym owner i przy okazji wszystkie pola z options_types, które mają id równe polu option z tabeli options. Żeby nie być gołosłownym, skonstruowałem własne zapytanie:
  1. SELECT * FROM main AS m, options AS opt, options_types AS opt_t
  2. WHERE opt.owner = main.id AND opt_t.id = opt.OPTION;
To zapytanie ma jednakże sporo wad:
1.) Zignoruje rekordy z tabeli main, które nie mają odpowiednika w tabeli options (a są takie)
2.) Jeżeli jednemu rekordowi z tabeli main przypada więcej niż jeden rekord w tabeli options, zostanie wybrany tylko pierwszy - pozostałe zostaną zignorowane

każdy rekord z tabeli options ma dokładnie jeden odpowiadający mu rekord z tabeli options_types. Jeden rekord z tabeli main ma dowolną ilość (także zero), odpowiadających mu rekordów z tabeli options.

Jak wybrać wszystkie te dane i zapisać w tablicy wielowymiarowej za jednym zamachem?

MySQL 4.0


--------------------
Językiem którym najlepiej operują wszyscy programiści są przekleństwa.
Go to the top of the page
+Quote Post

Posty w temacie


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: 21.08.2025 - 16:53