Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL]dwa zapytania w jednej kolumnie
Forum PHP.pl > Forum > Przedszkole
Pcbecaw
Jak skonstruować warunek WHERE (mysql+php), żeby brało mi np. jedno słowo z danej kolumny? Dajmy na to, że w kolumnie mam: (słowo1, słowo2), w warunku WHERE skonstruowane, że wyświetla rekordy, gdzie w kolumnie jest (słowo1), to jak zrobić, żeby to działało? Oddzielanie przecinkiem w phpmyadmin nie działa.
drPayton
  1. WHERE kolumna LIKE '%slowo1%'


?

A jak nie o to chodzi, to dokładniej opisz problem, najlepiej na przykładzie. Chyba, że ktoś inny domyśli sie o co chodzi ;P
Pcbecaw
Zapewne chodzi o to, tylko że nie wiem jak dopisać to do tego:
  1. $sql='select * from newsy where keywords="'.htmlspecialchars(addslashes(trim($_GET['t']))).'"LIMIT '.$start.', '.$limit.'';

Chodzi o to że WHERE tworzy to, co się wpisze np. index.php?t=WPISANEHASŁO i chciałbym zrobić tak, że jak np. w bazie mam WPISANEHASŁO, innehasło to wyświetli mi dane z tej kolumny, bo zawiera WPISANEHASŁO.
drPayton
Ahm, Ty cały czas ten sam skrypt tworzysz tongue.gif

Nie lepiej byłoby w jednym temacie to wszystko trzymać?

W poprzednim temacie, gdy pojawił się problem filtrowania danych przeoczyłeś najwyraźniej sugestię, żeby tego krzaka zastąpić mysql_real_escape_string(). Ale to na marginesie.

A co do meritum:

  1. // rozbiłem, żeby czytelniej było
  2. $input = htmlspecialchars(addslashes(trim($_GET['t'])));
  3. // a lepiej
  4. $input = trim(mysql_real_escape_string($_GET['t']));
  5.  
  6. $sql='select * from newsy where keywords LIKE "%' . $input . '%" LIMIT '.$start.', '.$limit.'';


To rozwiązanie na małe systemy / małe bazy. "LIKE" jest mało wydajny.


I tak mi sie jeszcze nasunęło: czy te hasło to tag, którym oznaczany jest news? Jeśli tak, to źle imho to rozwiązane jest. Chyba lepiej byłoby zrobić osobną tabelę z tagami, do tego tabelę łączącą newsy z tagami. Więcej roboty, więcej kodu, ale spore ułatwienie...
Pcbecaw
Cytat(drPayton @ 14.06.2011, 13:51:18 ) *
To rozwiązanie na małe systemy / małe bazy. "LIKE" jest mało wydajny.

A jest na to inny sposób? lepszy? Taki na większą baze?
drPayton
Sposób, który podałem w ostatniej linijce jest już lepszy.

Powód - przykład:

masz dwa tagi, którymi oznaczasz newsa: "lok" i "lokomotywa". Wykorzystując podany sposób z LIKE, szukając newsów oznaczonych tagiem "lok" wybierzesz również te, oznaczone tagiem "lokomotywa" a w większości sytuacji jest to zachowanie niepożądane. Drugi ze sposobów eliminuje ten błąd.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.