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

Wyszukiwarka w PHP i SQL - jak usunąć zduplikowane wyniki zapytania?

Object Storage Arubacloud
0 głosów
175 wizyt
pytanie zadane 29 września 2019 w SQL, bazy danych przez Paproch Użytkownik (700 p.)
edycja 29 września 2019 przez Paproch

Witam,

Mam wyszukiwarkę na stronie (no jeszcze nie mam bo nie działa tak jak chce). Przeszukuje zasoby w mojej bazie danych. No i generalnie wszystko ładnie pięknie, tylko że bardzo często zwraca zduplikowane wyniki co w cale mnie nie dziwi patrząc na kod. 

Mechanika działania skryptu:
1. Jest pole imput do którego wprowadzam frazę zapytania
2. Jeżeli jest to fraza składająca się z kilku wyrazów rozbiją ją explodem
3. Następnie każde słowo przeszukiwane jest w dwóch różnych kolumnach
4. Pobieram i wyświetlam wyniki

Problem jest taki że mam dwie różne tabele w bazie i przy złożonym zapytaniu skrypt zwraca mi wielokrotnie ten sam rekord. Np. Jest kolumna1, która zawiera frazę "to jest" a w kolumna2 jest fraza "test". I jak wpiszę w wyszukiwarkę frazę "to jest test" to skrypt zwróci mi to 3 razy "to jest test", a chciałbym uzyskać tylko jeden lub wiele rekord, ale nie zduplikowanych. Poniżej kod. Mam nadzieję że wyjaśniłem problem w najbardziej zrozumiały sposób.

$search = $_POST['search'];
$search_value = explode(" ",$search);
$ile = count($search_value);
for ($i=0; $i<$ile; $i++)
{
	require_once 'database.php';
	$s='%'.$search_value[$i].'%';
	$sql=$db->prepare('SELECT * FROM tabela1, tabela2 WHERE kolumna1 z tabeli2 LIKE :search OR kolumna2 z tabeli2 LIKE :search2 AND tabela1.id=tabela2.id');
	$sql->bindValue('search', $s, PDO::PARAM_STR);
	$sql->bindValue('search2', $s, PDO::PARAM_STR);
	$sql->execute();
	$fetch=$sql->fetchAll();
	$rowcount=$sql->rowCount();
	
	if($rowcount<1)
	{
	echo 'Brak wyników dla: '. $search;
	}
												
	
	foreach($fetch as $wiersz)
	{
	echo 'ID przepisu: '.$wiersz['id z tabeli1'].' '.$wiersz['wartosc kolumny1 z tabeli2'].'<br>';
}

 

1 odpowiedź

+1 głos
odpowiedź 30 września 2019 przez areklipno Stary wyjadacz (11,930 p.)
wybrane 30 września 2019 przez Paproch
 
Najlepsza

w zapytaniu trzeba wyszczególnić te 2 kolumny, które Cię interesują i dodać distinct czyli:

select distinct kolumna1, kolumna2 from .........

 

komentarz 30 września 2019 przez Paproch Użytkownik (700 p.)
Dzieki,

Czesciowio działa. Próbowałem uzyć wczesniej Distinct ale nie podałem kolum tylko dalem *. Z dwiema kolumnami działa mi tak jak powinno, problem pojawia się jak dodam trzecia kolumne :) ale dalej juz powinienem sobie poradzić

Dzieki wielkie.
Pozdrawiam

Podobne pytania

+1 głos
3 odpowiedzi 315 wizyt
0 głosów
1 odpowiedź 118 wizyt
pytanie zadane 17 lutego 2019 w SQL, bazy danych przez Mateusz Kacprzak Początkujący (360 p.)
0 głosów
3 odpowiedzi 600 wizyt
pytanie zadane 3 lutego 2016 w SQL, bazy danych przez saliwan22 Gaduła (3,110 p.)

92,579 zapytań

141,429 odpowiedzi

319,657 komentarzy

61,962 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!

...