Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MySQL]dwa zapytania w jednej kolumnie
Pcbecaw
post 14.06.2011, 12:39:00
Post #1





Grupa: Zarejestrowani
Postów: 236
Pomógł: 0
Dołączył: 4.06.2011

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
drPayton
post 14.06.2011, 12:42:47
Post #2





Grupa: Zarejestrowani
Postów: 890
Pomógł: 65
Dołączył: 13.11.2005
Skąd: Olsztyn

Ostrzeżenie: (0%)
-----


  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

Ten post edytował drPayton 14.06.2011, 12:43:17
Go to the top of the page
+Quote Post
Pcbecaw
post 14.06.2011, 12:46:14
Post #3





Grupa: Zarejestrowani
Postów: 236
Pomógł: 0
Dołączył: 4.06.2011

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
drPayton
post 14.06.2011, 12:51:18
Post #4





Grupa: Zarejestrowani
Postów: 890
Pomógł: 65
Dołączył: 13.11.2005
Skąd: Olsztyn

Ostrzeżenie: (0%)
-----


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...

Ten post edytował drPayton 14.06.2011, 12:53:29
Go to the top of the page
+Quote Post
Pcbecaw
post 14.06.2011, 12:56:13
Post #5





Grupa: Zarejestrowani
Postów: 236
Pomógł: 0
Dołączył: 4.06.2011

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
drPayton
post 14.06.2011, 13:44:32
Post #6





Grupa: Zarejestrowani
Postów: 890
Pomógł: 65
Dołączył: 13.11.2005
Skąd: Olsztyn

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 08:03