Zapytanie MySQL.

0

Cześć,

Mam taki schemat tabelki jak przykład poniżej.

id | title | tags |

1 | abc | t1, t4, t5 |
2 | bfg | t8, t1, t4 |
3 | fgj | t0, t4, t5 |
4 | rty | t1, t2, t3 |
5 | drd | t20, t40, t50|

Pobieram i operuję na rekordzie pierwszym o id = 1.
Tagi mam pobrane w zmiennej $q['tags'], zawartość tej zmiennej wygląda tak:

t1, t4, t5

Chciałbym stworzyć takie zapytanie MySQL, aby pobrać wszystkie pozostałe rekordy gdzie jest zgodność tagów (pasuje chociaż jeden, lub więcej oczywiście).

Z góry dziękuję i pozdrawiam,
M.

0

Podaj struktury tabel, nie zawartość: explain tabelka;
lub: show create table tabelka;

2

Cześć,

Masz złą strukturę bazy danych. W każdej kolumnie powinna być jedna dana — w tym wypadku jeden tag. Nie oznacza to jednak, że trzeba utworzyć w tabeli ∞ kolumn. :) Lekarstwem na ten problem jest użycie relacji w bazie danych:

muszą istnieć np. trzy tabele; w jednej tabeli będą tytuły, a drugiej tagi; trzecia posłuży do tworzenia relacji, czyli łączenia tytułu z tagiem (Many to many):

dla przykładu:

title_id | title
1 | abc
2 | def
tag_id | tag
1 | t1
2 | t2
3 | t3
title_id | tag_id
1 | 1
1 | 2
2 | 3

Dane w tabeli oznaczają, że:

"abc" ma tagi t1 i t2
"def" ma tagi t3

Wówczas szukanie polegałoby na zapytaniu:

select distinct titles.title from titles left join titles_tags on titles.title_id=titles_tags.title_id left join tags on titles_tags.tag_id=tags.tag_id where tags.tag='t1';
0

Rozumiem, tylko że nie bardzo mam na ten moment możliwość przerobienia bazy.

Zastanawiam się czy nie dałoby się tego jakoś ugryźć operatorem LIKE:

SELECT * FROM  tabela WHERE  `tags` LIKE ...
0
SELECT * FROM  tabela WHERE concat(", ",tags,", ") LIKE "%, t1, %";

z tym że to podejście wymusza przeszukiwanie każdego wiersza.
Lepiej znajdź możliwość przerobienia tej bazy wg wskazówek od @jackweb

0

jeśli chcesz aby to miało jakiekolwiek szanse działać to najpierw musisz pozbyć się znaków niepotrzebnych z tej kolumny - chodzi przede wszystkim o znaki białe (spacja, tab), które nie są tagiem

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