Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Pomoc w tworzeniu zaawansowanego zapytania
nixau
post
Post #1





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 30.04.2006

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


Witam. Może ktoś z Państwa pomoże mi rozwiązać następujący problem.

Mamy 2 tabele

tabela "test" ma następujące komórki
id | nazwa | opis
1 | test | to jest test
2 | test 2 | to jest test 2
3 | ... | ...
4 | ... | ...

tabela "nazwa"

id | nazwa | wartości
1 | nazwa 1 | 1,2
2 | nazwa 2 | 1,4
3 | nazwa 3 | 1,4,2,3

jak zrobić zapytanie takie, że wybieram konkretny id z tabeli "nazwa" oraz wszystkie komórki z tabeli "test" które odpowiadają numeracji z tabeli "nazwa".wartości

Ja poradziłęm sobie tak (w skrócie):

select * from test;
...
$t[ id ] = nazwa;

select * from nazwa where id=5;
...
$w = explode(',', $wartosc)

for (...) echo $t[ ($w[$i]) ];

ale interesuje mnie bardziej profesjonalne podejście do tego problemu (może jest to możliwe zrobienie w jednym zapytaniu)


Przy okazji ma ktoś jakieś ciekawe tutoriale to opisu zaawansowanych zapytań w mysql? Tak żeby były jeszcze opisane przykłady z użyciem IF, oraz @ (np. @val := if (...)).
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Norbas
post
Post #2





Grupa: Zarejestrowani
Postów: 100
Pomógł: 1
Dołączył: 6.02.2006

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


Ale jesteś uparty (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Nie powinno się robić takiej struktury bazy danych jaką podałeś - błąd już w fazie projektowania.
Jeśli chcesz tak zrobić, to musisz wyraźnie oddzielić od siebie składniki, aby wiedzieć gdzie zaczyna się kolejny identyfikator tabeli t1 (chyba, że będzie ich mniej niż 10).
W przykładzie, który podałeś pole 'skladniki' może mieć postać: ';1=1 szklanka;2=3 sztuki;3=2 łyżeczki' (średnik na początku).
Wtedy zapytanie można zbudować następująco:
  1. SELECT t2.nazwa, t1.id, t1.nazwa, skladniki
  2. FROM t1, t2
  3. WHERE t2.id = 1 AND INSTR(skladniki, CONCAT(';', t1.id, '=')) > 0

Po wykonaniu zapytania otrzymasz 3 wiersze:
  1. Przepis 1 | 1 | Mleko | ;1=1 szklanka;2=3 sztuki;3=2 łyżeczki
  2. Przepis 1 | 2 | Jajko | ;1=1 szklanka;2=3 sztuki;3=2 łyżeczki
  3. Przepis 1 | 3 | Cukier | ;1=1 szklanka;2=3 sztuki;3=2 łyżeczki

i musisz kolejno zamieniać w pętli ';identyfikator=' na t1.nazwa
IMO to zupełnie nie ma sensu. Wyobraź sobie, że otrzymasz 100 wierszy (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 28.12.2025 - 18:24