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:
KOD
------------------------------
id | id_produkt | id_tag
------------------------------
12032 389 1339
3302 390 1339
12033 389 1340
3301 390 1340
3299 390 1341
3300 390 1342
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:
KOD
$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());
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:
KOD
$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());
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:
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]';
}
}
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