Wyszukiwanie rekordów - czy dobrze robię?

0

Potrzebuję do cms zrobić pokazywanie postów według tagów, tzn jeżeli w tagu jest np. "cms" to ma pokazać ten wpis. W tabeli mam to zrobione tak, że mam kolumnę "Tags" a tam tagi rozdzielone przecinkiem, ale to nie ważne bo w zapytaniu używam %% procentów po bokach czyli znajdzie mi nawet jeśli są tam też inne tagi. Zrobiłem funkcje ładną, działającą, no prawie bo dziwne, że znajduje tylko jeden wynik, tzn. ja nie sądzę, że jeden znajduję, jeden po prostu pokazuje, jeden raz wykonuje funkcję więc się zgadza. Co zrobić, żeby wyświetlić kolejne wyszukania zapytania sql?
Tak to wygląda:

elseif(isset($_GET["tag"])){
	$skonczone = 0;
	while($skonczone == 0){
	$zapytanie_chwilowe = "SELECT * FROM $sqltable WHERE Tags LIKE ";
	$zapytanie_chwilowe .= "'".$_GET['tag']."'";
	echo  $zapytanie_chwilowe;
	post_show_sql($zapytanie_chwilowe);
	//if(){}
	$skonczone = 1;
	}

i uruchamia się ta funkcja, działa, ale ta funkcja musi się wykonać drugi raz, tylko nie wiem jak to zapisać

include("configuration.php");
	$licznik=liczenie_elementow();
	//while ($licznik > 0){
		//$sql="ERROR!";
	$sql = $sql_to_execute;
	$result = $db->query($sql);
	$result = @$result->fetch();
	
	//$result = explode(" ",$result);
	echo"<hr>";
echo<<<EON
<span class="date">$result[1]</span> ,  
<span class="time">$result[2]</span> , 
#$result[0] <br>
<span class='title'><a href=show.php?id=$licznik>$result[3]</a></span> <br>
<div class="content">$result[4]</div>
<div class="tags">
EON;
$licznik--;
//tagi
if($show_tags == 1){
$tags = $result[5];
$tag = explode(",", $tags);

$tag_counter=0; 
$tag_number= count($tag);
while($tag_counter < $tag_number){
echo "<span class=\"tag\"><a href='?tag=$tag[$tag_counter]'>$tag[$tag_counter]</a></span>  ";
$tag_counter++;
//}
}

@hopaj @czysteskarpety @jurek1980

2

Tutaj lepiej byłoby dodać tabelę Tags. W niej trzymasz, jeden tag i post_id. Potem zamiast szukać z like robisz pełne porównanie. Po co mi tag "winowajca" jak szukam "wino". Przemyśl na spokojnie.

0
jurek1980 napisał(a):

Tutaj lepiej byłoby dodać tabelę Tags. W niej trzymasz, jeden tag i post_id. Potem zamiast szukać z like robisz pełne porównanie. Po co mi tag "winowajca" jak szukam "wino". Przemyśl na spokojnie.

Kolega musi przemyslec jeszcze wieeelee spraw. Ale dobrze ze sie bierze i zaczyna w ogóle.

0

@jurek1980: bardzo dobre rozwiązane, lepsze niż moje, ale w jednym będą dwa tagi a w innym cztery, więc jak potem to zrobić? Powiedz mi raczej czy szukanie z LIKE zwraca więcej niż jeden wynik czy jednak nie, bo jak nie to będę robił kolejną funkcję, która będzie zapamiętywać znalezione wpisy i je odrzucać, aż znajdą się kolejne lub nie.

1

Poczytaj o relacjach między tabelami, tutaj interesuje Cię relacja "one to many". Jeden post będzie miał jedno id, w tabeli tagi każdy tag będzie miał przypisane id odpowiadającego postu. Szukając po tagu masz trafiony post.

1 użytkowników online, w tym zalogowanych: 0, gości: 1