Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] SELECTowanie po wartosci kolumny w której wartośći są oddzielane przecinkami
Forum PHP.pl > Forum > Przedszkole
Victor152
Siema.

Mam do wykonania system losowania reklamy z filtrem dla grup użytkowników oraz miejc.

Mam wiec tabele:
aid | htmlcode | gids | places

i np...
1 | <b>reklama</b> | 1,2,3,4,5 | ad1,ad2,ad3

I chce teraz pobrac wszystkie rekordy, ktore w gids posiadają np. 4 a w places ad2.
Nie moge tego zrobic poprzez LIKE, bo gdy grupa dla ktorej reklama powinna byc wyswietlana bedize takze 11, a ja dam 1 to znajdzie mi i 1 i 11.

Mysle tutaj o jakiejs funkcji w MySQL ktora zrobi z gids tablice i porowna jej elementy.
Czy cos takeigo istnieje?

Ew. jezeli ktos moglby dalej pojsc, to przydalo by mi sie rozwiazanie takze, zeby pobrac wszystkie reklamy dla danej GID, z roznymi places (zaleznie od strony), wylosować 1 i posortować w/g miejsca docelowego.

Prosiłbym o jakieś nakierowanie.
wiiir
zrob to z INSTR najlepiej jeszcze daj przecinek na poczatku i na koncu czyli

skladnia z plsql-a

  1. ...
  2. AND instr(','||nazwa_szukana||',',','||nazwa_kolumna||',',1) > 1


EDIT
teraz zobaczylem ze w mysql troche inaczej to dziala, tam jest chyba locate

Ten przecinek jest dla przypadkow 1,11,111 jak chesz znalesc 1
to w przypadku gdy masz ,1,11,111, i szukasz ,1, nie ma opcji zeby znalazlo 11 i 111
Victor152
Takie rozwiązanie jest deczko kulawe.

No nie wiem, może jakieś inne rozwiązanie robiąc trzy tabele i tworząc tam pewne powiązania (left join etc.)?

Jakaś podpowiedź, żebym coś chwycił...
wiiir
Cytat(Victor152 @ 31.03.2011, 18:34:43 ) *
Takie rozwiązanie jest deczko kulawe.

No nie wiem, może jakieś inne rozwiązanie robiąc trzy tabele i tworząc tam pewne powiązania (left join etc.)?

Jakaś podpowiedź, żebym coś chwycił...


Uzasadnij kulawosc smile.gif
Zawsze mi takie zapytania smigaly smile.gif
Victor152
Zmiana planu smile.gif.

  1. SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
  2.  
  3. CREATE TABLE IF NOT EXISTS `reklama` (
  4. `id` int(5) NOT NULL AUTO_INCREMENT,
  5. `html` longtext COLLATE utf8_polish_ci NOT NULL,
  6. PRIMARY KEY (`id`),
  7. UNIQUE KEY `id` (`id`)
  8. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci AUTO_INCREMENT=2 ;
  9.  
  10. INSERT INTO `reklama` (`id`, `html`) VALUES
  11. (1, '<b>REKLAMA</b>');
  12.  
  13. CREATE TABLE IF NOT EXISTS `reklama_gid_assign` (
  14. `id` int(11) NOT NULL AUTO_INCREMENT,
  15. `rid` int(3) NOT NULL,
  16. `gid` int(3) NOT NULL,
  17. PRIMARY KEY (`id`),
  18. UNIQUE KEY `id` (`id`),
  19. KEY `gid` (`gid`)
  20. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci AUTO_INCREMENT=2 ;
  21.  
  22. INSERT INTO `reklama_gid_assign` (`id`, `rid`, `gid`) VALUES
  23. (1, 1, 4);
  24.  
  25. CREATE TABLE IF NOT EXISTS `reklama_place_assign` (
  26. `id` int(11) NOT NULL AUTO_INCREMENT,
  27. `rid` int(3) NOT NULL,
  28. `place` varchar(100) COLLATE utf8_polish_ci NOT NULL,
  29. PRIMARY KEY (`id`),
  30. UNIQUE KEY `id` (`id`)
  31. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci AUTO_INCREMENT=2 ;
  32.  
  33. INSERT INTO `reklama_place_assign` (`id`, `rid`, `place`) VALUES
  34. (1, 1, '{ad_header}');
  35.  


Potrzebuje teraz zapytania zeby pobrać rekordy bazując na
  1. SELECT id, html, place FROM ... WHERE gid = ID_GRUPY AND (place = "{ad_header}" OR place = "{ad_footer}")


I jezeli jakas reklama pasuje i do header i do footer (ma oba place_assign) to zeby potraktowalo ją dwa razy.

Any1 can help me? smile.gif
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.