Skocz do zawartości

Wyciąganie z bazy produktów powiązanych


holee

Rekomendowane odpowiedzi

Witam;

Problem wydaje się być błahym, jednak siedzę i się wkurzam już którą godzinę z rzędu.

Próbuję wyciągnąć z bazy powiązane produkty z innym produktem po tagach, które są przypisane do obu produktów.

i tak, jest tabela z tagami - tabela_tagi:

------------------------------
id | id_produkt | id_tag
------------------------------
12032 	389 	1339
3302 	390 	1339
12033 	389 	1340
3301 	390 	1340
3299 	390 	1341
3300 	390 	1342

jak ja to robię teraz:

wyciągam z bazy tagi przypisane do danego produktu, powiedzmy że produktu o id 390

otrzymuję tagi np. 1339, 1340, 1341, 1342:

$sql_pod = mysql_query ("
SELECT id_tag FROM
	tabela_tagi as wt
LEFT JOIN tabela_produkt as w ON
	wt.id_produkt = w.id
WHERE
	wt.id_produkt = '".$produkt[id]."'
") or die(mysql_error());

kolejnym zapytaniem wyciągam id_produktów przypisanych do tagów wyłączając produkt na którym się znajduję:

otrzymuję: 389, 389:

$sql_pod2 = mysql_query ("
SELECT w2.id as w2id, w2.nazwa as w2nazwa FROM
	tabela_produkt as w2
LEFT JOIN tabela_tagi as wt2 ON
	wt2.id_produkt = w2.id					
WHERE
	wt2.id_tag = '".$podobne[id_tag]."' AND
	w2.id != '".$produkt[id]."'
GROUP BY id_produkt
") or die(mysql_error());

i teraz za cholerę nie mogę zrobić aby wyświetlał mu się produkt tylko jeden raz, a nie dwa razy.

Próbowałem group by, distinct i nadal kiszka.

oto cały kod:

$sql_pod = mysql_query ("
SELECT id_tagi FROM	tabela_tagi as wt
LEFT JOIN wina as w ON
	wt.id_wina = w.id
WHERE
	wt.id_wina = '".$wina[id]."'
") or die(mysql_error());

while($podobne = mysql_fetch_assoc ($sql_pod)) {

$sql_pod2 = mysql_query ("
	SELECT w2.id as w2id, w2.nazwa as w2nazwa FROM
		tabela_produkt as w2
	LEFT JOIN tabela_tagi as wt2 ON
		wt2.id_produkt = w2.id					
	WHERE
		wt2.id_tag = '".$podobne[id_tag]."' AND
		w2.id != '".$produkt[id]."'
	GROUP BY id_produkt
") or die(mysql_error());

while($podobne2 = mysql_fetch_assoc ($sql_pod2)) {

	echo '$podobne2[w2.nazwa]';
}
}

Wiem, że to męczące patrzenie w czyjś kod, ale bardzo proszę o pomoc.

Niby działa, jednak wyświetlanie kilka razy jednego produktu psuje cały efekt.

Będę wdzięczny.

Pozdrawiam

Niedrogie wpisy w płatnych, zadbanych, długowiecznych katalogach (hurtem taniej - pisać na PW):

Odnośnik do komentarza
Udostępnij na innych stronach

group by w2.id ?

Masz rację, źle po prostu napisałem tutaj na forum.

Nadal sobie nie poradziłem z problemem więc spróbuje jeszcze raz odrobinę mniej zawile :)

Wyciągam powiązane tagi z produktem. Otrzymuje przykładowe kilka id tagów:

1, 3, 5, 7, 9

Na tym etapie wszystko jasne :)

Do jednego taga może być przypisanych kilka produktów, problem pojawia się gdy dwa lub więcej produkty mają więcej niż jeden wspólny tag.

Za pomocą otrzymanych id tagów, próbuje wyciągnąć z bazy id produktów. Jeśli zachodzi przypadek, że produkty mają kilka wspólnych tagów wówczas wyciągam jeden produkt kilkakrotnie.

A tego właśnie chcę uniknąć :) Niby banał, ale mi się już chyba mózg zlasował :P

Oto kod:

$sql_pod = mysql_query ("
			SELECT id_tagi FROM
				wina_tagi
			WHERE
				id_wina = '".$wina[id]."'
		") or die(mysql_error());

		while($podobne = mysql_fetch_assoc ($sql_pod)) {

			$aa = mysql_query ("
				SELECT * FROM
					wina_tagi
				WHERE
					id_tagi = '".$podobne[id_tagi]."' AND
					id_wina != '".$wina[id]."'
				GROUP BY id_wina
			") or die(mysql_error());

			while($podobne2 = mysql_fetch_assoc ($aa)) {
				dump($podobne2);
			}
}

A oto wyrywek dumpa:

Array

(

[id] => 9019

[id_wina] => 966

[id_tagi] => 202

)

Array

(

[id] => 3024

[id_wina] => 967

[id_tagi] => 202

)

Array

(

[id] => 12106

[id_wina] => 968

[id_tagi] => 202

)

Array

(

[id] => 9017

[id_wina] => 966

[id_tagi] => 58

)

Array

(

[id] => 3027

[id_wina] => 967

[id_tagi] => 99

)

Array

(

[id] => 12104

[id_wina] => 968

[id_tagi] => 99

)

Array

(

[id] => 380

[id_wina] => 976

[id_tagi] => 99

)

i proszę podpowiedzcie mi dlaczego GROUP BY id_wina nie działa ?

Pozdrawiam i dziękuję za uwagę.

Daniel

Niedrogie wpisy w płatnych, zadbanych, długowiecznych katalogach (hurtem taniej - pisać na PW):

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli to po czym grupujesz jest unikalne w wyniku, to znaczy, ze działa ;)

Za pomocą otrzymanych id tagów, próbuje wyciągnąć z bazy id produktów. Jeśli zachodzi przypadek, że produkty mają kilka wspólnych tagów wówczas wyciągam jeden produkt kilkakrotnie.

Pogrupuj po id produktu.

A no fakt nie zadziała bo wykonujesz drugą kwerendę kilka razy

Jeśli nie chcesz zmieniać tych 2 kwerend na 1 z inner join (wtedy group by zadziała jak trzeba) to sobie zdefiniuj tablice

$wynik = array();

potem dodawaj powiązane tak:

foreach ($sql_wynik as $wiersz)

$wynik[$wiersz['id_wina']] = $wiersz

Będziesz miał unikalne wyniki.

Odnośnik do komentarza
Udostępnij na innych stronach

@slawek22, wielkie dzięki za pomoc. Jakoś mi się udało łącząc dwa zapytania w jedno. Nigdy wcześniej nie stosowałem inner join stąd moje problemy. Nadal nie wiem jak się je stosuje, ale najwyraźniej szczęście mi dopisało ;)

Jeszcze raz wielkie dzięki.

POzdrawiam

Niedrogie wpisy w płatnych, zadbanych, długowiecznych katalogach (hurtem taniej - pisać na PW):

Odnośnik do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Warunki użytkowania Polityka prywatności