[MYSQL] Jak odczytać dane z tabeli

0

Witam,
Mam taki problem otoz mam tabele, ktora wyglada w nastepujacy sposob:

NAZWA | POWIADOM
POLICJA | 1,2,3,4,5,6,10,15,20 itd.

1,2,3 itd- informuja o zdarzeniach

Moje pytanie brzmi jak sformulowac zapytanie, jeśli zagrożenie występuje pod numerem 5 zeby mi wybieralo wszystkich, ktorzy w tabeli powiadom maja wpisane 5

Ja to probowalem użyć takiego zapytania:

$a=$_GET['id'];
$query = "SELECT * FROM powiadom WHERE powiadomic LIKE '%$a,%'";
       $result = mysql_query($query)
              or die ("Zapytanie nieudane!");

Ale to zapytanie powoduje, że jeśli np wybieram zagrozenie nr 5 to wyświetla mi wszystkie nazwy w ktorych występuje liczba 5 nawet jeśli nie mam SAMEJ liczby 5 tylko np 15,25, itd. A chciałbym żeby tylko wyświetlało mi wszystkie te rekordy, które mają SAMĄ liczbę np 5 itp.

Bardzo bym prosił o pomoc.

0

Zle stworzyles strukture bazy. Lepiej byloby rozbic to na 2 tabele, tak by nie wystepowaly listy w jednym rekordzie - znaczy, zeby znormalizowac baze do sensownej postaci.

Jak mozesz zmienic to zmien tabele na

create table Nazwy
(
id int primary key,
nazwa varchar(ilestam)
)

create table Powiadomienia
(
id_nazwy int
nr_powiadomienia int,
primary key(id_nazwy, nr_powiadomienia)
)

W ten sposob bedziesz mial poszczegolne powiadomienia dla kazdej 'nazwy' w osobnym wierszu i duuuuzo latwiej wyszukasz. A miejsca nie stracisz.

0

Faktycznie struktura bazy nie najlepsza, ale jak już to spróbuj tak:

SELECT * FROM powiadom WHERE powiadomic LIKE '%,$a,%'

dodanie tego przecinka po % powinno załatwić że tylko ciąg ',5,' będzie brany pod uwagę, a nie ciągi '....5,'. Być może pomoże. Trzeba tylko pamiętać żeby na koniec listy dopisywać ten przecinek

0

zauwaz, ze 5 moze byc tez na poczatku..

0
Bomba napisał(a)

NAZWA | POWIADOM
POLICJA | 1,2,3,4,5,6,10,15,20 itd.

1,2,3 itd- informuja o zdarzeniach

Moje pytanie brzmi jak sformulowac zapytanie, jeśli zagrożenie występuje pod numerem 5 zeby mi wybieralo wszystkich, ktorzy w tabeli powiadom maja wpisane 5

Pomijając to co zostało już wspomniane (nie zła, ale spieprzona struktura bazy), to możesz to zrobić tak:
select * from pow where powiadom like '5,%' or powiadom like '%,5' or powiadom like '%,5,%' or powiadom like '5'

Ew. pobaw się regexpami przy użyciu 'WHERE powiadom RLIKE "..."'.
Ale zdecydowanie takie coś to strzelanie sobie w stopę. Dokonaj jakiejś sensownej normalizacji tabel, wtedy dopiero taka zabawa będzie miała sens.

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