• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Jak pobrać dane przypisane do tagów?

Object Storage Arubacloud
0 głosów
114 wizyt
pytanie zadane 19 grudnia 2018 w SQL, bazy danych przez Muhin Gaduła (4,120 p.)
zamknięte 20 grudnia 2018 przez Muhin

Cześć.

Mam taką tabelę:

id tag_id series_id
1 1 1
2 2 1
3 1 2
4 2 2
5 2 3
6 5

3

Jak widać mam tabelę z identyfikatorami tagów i jakichś serii. Każda seria może mieć kilka tagów więc dla jednej serii można mieć kilka wierszy z tagami. Chcę zrobić wyszukiwarkę treści na podstawie tych tagów. Załóżmy, że szukam wszystkich treści posiadających tag 1 i 2. Rezultatem takiego zapytania powinny być wiersze 1, 2, 3, 4. Jak skonstruować zapytanie które spełni moje oczekiwania?

komentarz zamknięcia: Problem rozwiązany.

2 odpowiedzi

0 głosów
odpowiedź 19 grudnia 2018 przez Anysiu68 Użytkownik (820 p.)

Witaj.

Po pierwsze aby dostać połączenie wszystkich kategorii i tagów użyj zapytania:

SELECT * FROM series, tags, serie_tag
WHERE series.id = serie_tag.id AND tags.id = serie_tag.tag_id

Następnie możesz do tego dodać warunek filtrujący wyniki np:

SELECT * FROM series, tags, serie_tag
WHERE series.id = serie_tag.id AND tags.id = serie_tag.tag_id
AND (serie_tag.tag_id = 1 OR serie_tag.tag_id = 2)

Później możesz wybierać konkretne kolumny, grupować wyniki, przekazać tablicę tagów zamiast sklejać je OR itd.

Niestety nie mam dostępu do żadnej bazy danych i piszę z pamięci, ale mam nadzieję, że nie popełniłem żadnego błędu.

W razie wątpliwości pytaj śmiało.

Pozdrawiam.

komentarz 19 grudnia 2018 przez Muhin Gaduła (4,120 p.)

Napisałem takie zapytanie:

SELECT serieses_tags.series_id FROM serieses_list, serieses_tags, tags 
WHERE serieses_list.id = serieses_tags.series_id AND tags.id = serieses_tags.tag_id 
AND (serieses_tags.tag_id = 1 OR serieses_tags.tag_id = 3)

ale w takim wypadku dostaję wszystkie pozycje w których jest tag o ID 1, a założenie jest takie żeby dawało wszystkie pozycje w których są tagi o ID 1 i 3 więc zmieniłem to zapytanie na takie:

SELECT serieses_tags.series_id FROM serieses_list, serieses_tags, tags 
WHERE serieses_list.id = serieses_tags.series_id AND tags.id = serieses_tags.tag_id 
AND (serieses_tags.tag_id = 1 AND serieses_tags.tag_id = 3)

i nie dostałem żadnego rezultatu, a powinno ich być co najmniej kilka.

0 głosów
odpowiedź 20 grudnia 2018 przez Muhin Gaduła (4,120 p.)

Dobra, udało mi się jakoś pokombinować i znalazłem rozwiązanie.

SELECT serieses_tags.series_id
FROM serieses_tags
JOIN tags
ON tags.id = serieses_tags.tag_id
GROUP BY serieses_tags.series_id
HAVING SUM(CASE WHEN tags.id = 1 THEN 1 ELSE 0 END) > 0 AND
SUM(CASE WHEN tags.id = 3 THEN 1 ELSE 0 END) > 0 AND
SUM(CASE WHEN tags.id = 6 THEN 1 ELSE 0 END) > 0

 

Podobne pytania

0 głosów
1 odpowiedź 143 wizyt
pytanie zadane 9 maja 2019 w JavaScript przez Whereismycode Obywatel (1,710 p.)
0 głosów
1 odpowiedź 225 wizyt
pytanie zadane 20 stycznia 2017 w PHP przez DanielMK Nowicjusz (120 p.)
0 głosów
3 odpowiedzi 183 wizyt
pytanie zadane 11 lutego 2017 w PHP przez ThePatrykOOO Dyskutant (8,400 p.)

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...