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

Wyszukiwanie po kategori ale wyświetalnie wszystkich kategori

Object Storage Arubacloud
0 głosów
138 wizyt
pytanie zadane 10 marca 2017 w SQL, bazy danych przez mordimer Mądrala (5,720 p.)

Witam mam powiedzmy jedna tabele w której są posty :

tabela : post

id tytuł data text
1 tytuł posta 2017-03-08 lorem ipisum

jeden post może należeć do kilku kategorii ... kategorie przechowuje w tabeli tego typu:

tabela: post_category

id id_post id_category
1 1 1
2 1 3
3 1 4
4 1 5

kategorie wyświetlam potem na zasadzie :

if(id_category=1){
echo "kategoria pierwsza 1";
}

if(id_category=1){
echo "kategoria 2";
}

wiadomo o co chodzi ...

tylko teraz tak wyszukuje posty po kategorii :

$query="SELECT *, post_category.id_post, post_category.id_category 
FROM post,post_category 
WHERE post.id=post_category.id_post 
AND post_category.id_category='1' 
";
$wynik = $pdo->prepare($query);
$wynik->execute();

foreach ($wynik as $key) {
	echo $key['title'].'___kategoria: '.$key['id_category'].'<br>';
}

 

i to zapytanie wyszukuje mi wszystkie posty, które należą do kategorii 1 .... no i wszystko fajnie ale powiedzmy żę chce dodatkowo pod każdym postem wyświetlić wszystkie nazwy kategorii do jakich należy ten post ... ma ktoś jakiś pomysł jak zbudować takie zapytanie ? dziękuje za wszelkie sugestie.

 

2 odpowiedzi

0 głosów
odpowiedź 10 marca 2017 przez szustka124 Gaduła (4,380 p.)
Możesz wykonać drugie zapytanie, które pobierze kategorie należące do tego posta.
komentarz 10 marca 2017 przez mordimer Mądrala (5,720 p.)
edycja 10 marca 2017 przez mordimer

Domyślam sie że takie zapytanie trzeba wykonać wewnątrz pętli foreach ... i takie cos zrobiłem:

$query="SELECT 
post.id, post.tytul,post.data, post.text, 
post_category.id_post, post_category.id_category
FROM post,post_category
WHERE post_category.id_category='2'
AND post.id=post_category.id_post";


$wynik = $pdo->prepare($query);
$wynik->execute();
foreach ($wynik as $key=> $value) {
	echo $value['tytul'].'<br><br>';
	echo '<div style="color:red">'.$value['id'].'</div>'.'<br><br>';

	//zapytanie wyciagajace wszystkie nazwy kategori danego posta
	$query="SELECT post_category.id_category
	FROM post_category
	WHERE post_category.id_post=:id_post";

	$wynik2 = $pdo->prepare($query);
	$wynik2->bindParam(':id_post', $value['id'], PDO::PARAM_INT);
	$wynik2->execute();
	foreach ($wynik2 as $key2) {
		echo $key2['id_category'].'<br>';
		
	}
}

...teoretycznie to działa tylko jak sie to ma do wydajności ? chodzi mi o to czy takie rozwiązanie nadmiernie nie obciążą bazy ?

komentarz 12 marca 2017 przez szustka124 Gaduła (4,380 p.)
(Jeżeli jeszcze potrzebne)

Kiedyś miałem coś podobnego.

Nie wykonywałem kolejnych zapytań, a w pętli foreach dodawałem kolejne warunki do string'a z sql. Po wykonaniu pętli wysyłałem jedno długie zapytanie.
komentarz 5 maja 2017 przez mordimer Mądrala (5,720 p.)
Czesc sory ze tak pozno ale możesz to rozwinąć ? bo w sumie do tej pory nie znalazłem rozwiązania tego i wyciągam kategorie kolejnym zapytaniem ...
0 głosów
odpowiedź 10 marca 2017 przez Boshi VIP (100,240 p.)
To wyciąg z bazy nazwę tych kategorii też.. ? w czym masz problem?

po drugie korzystaj z join  a nie wypisuj po przecinku złączeń.

po trzecie, po co ci * przy select?
komentarz 10 marca 2017 przez mordimer Mądrala (5,720 p.)

No fakt powinno byc coś takiego:

$query="SELECT 
post.id, post.tytul,post.data, post.text, 
post_category.id_post, post_category.id_category
FROM post,post_category
WHERE post_category.id_category='2'
AND post.id=post_category.id_post";

... z join to chodzi ci o bardziej elegancki zapis czy ma to jakiś wpływ na wydajnosć ? ... a co do tego pierwszego to właśnie chce pobrać nazwy tych kategorii tylko jak ? wyszukuję post po kategori

AND post.id=post_category.id_post";

bez tego wyszukuje we wszystkich kategoriach do jakich on należy ale finalnie mam wyświetlony post tyle razy ile ma kategorii ...

Podobne pytania

0 głosów
0 odpowiedzi 101 wizyt
pytanie zadane 28 czerwca 2022 w SQL, bazy danych przez KonDZIKs Bywalec (2,770 p.)
+1 głos
0 odpowiedzi 175 wizyt
pytanie zadane 3 sierpnia 2017 w SQL, bazy danych przez raf123 Nowicjusz (130 p.)

92,632 zapytań

141,502 odpowiedzi

319,883 komentarzy

62,015 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!

...