Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL] SELECTowanie po wartosci kolumny w której wartośći są oddzielane przecinkami
Victor152
post
Post #1





Grupa: Zarejestrowani
Postów: 105
Pomógł: 3
Dołączył: 26.02.2008

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


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.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
wiiir
post
Post #2





Grupa: Zarejestrowani
Postów: 260
Pomógł: 34
Dołączył: 22.02.2010

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


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

Ten post edytował wiiir 31.03.2011, 16:51:41
Go to the top of the page
+Quote Post
Victor152
post
Post #3





Grupa: Zarejestrowani
Postów: 105
Pomógł: 3
Dołączył: 26.02.2008

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


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ł...
Go to the top of the page
+Quote Post
wiiir
post
Post #4





Grupa: Zarejestrowani
Postów: 260
Pomógł: 34
Dołączył: 22.02.2010

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


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 (IMG:style_emoticons/default/smile.gif)
Zawsze mi takie zapytania smigaly (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Victor152
post
Post #5





Grupa: Zarejestrowani
Postów: 105
Pomógł: 3
Dołączył: 26.02.2008

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


Zmiana planu (IMG:style_emoticons/default/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? (IMG:style_emoticons/default/smile.gif)

Ten post edytował Victor152 1.04.2011, 16:13:08
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 24.08.2025 - 21:48