Zapytanie SQL z =?ISO-8859-2?Q?pust=B1_tabel=B1?=
Broda - 09-02-2007 00:04
Zapytanie SQL z =?ISO-8859-2?Q?pust=B1_tabel=B1?=
Witam,
napisałem forum i wyciągam z niego 5 ostatnich wiadomości, które przeznaczone sa dla wszystkich. Zapytanie wygląda następująco:
SELECT forum_posts.* FROM forum_posts, forum_sections_grupy WHERE forum_posts.id_topic='0' AND forum_posts.id_section<>forum_sections_grupy.id_se ction ORDER BY forum_posts.date DESC LIMIT 5
gdzie forum_posts to tabela z wiadomościami a forum_sections_grupy to tabela łącząca sekcję forum (id_section) i grupy uprawnionych użytkowników (id_grupy).
Chodzi o to, żeby w ostatnich wiadomościach nie było takich, które należą do sekcji zawierających jakiś wpis w tabeli forum_sections_grupy.
Niestety to nie działa, jesli tabela forum_sections_grupy jest pusta. Nie wyświetla wówczas żadnych wiadomości.
Nawet takie zapytanie nic wówczas nie zwraca: SELECT forum_posts.* FROM forum_posts, forum_sections_grupy WHERE forum_posts.id_topic='0'
Jeśli dodam jakikolwiek rekord do tabeli forum_sections_grupy wszystko działa ok.
Jak powinienem zmodyfikować zapytanie żeby było ok? Z góry bardzo dziękuję.
-- broda
=?ISO-8859-2?Q?Pawe=B3_Matejski?= - 10-02-2007 00:02
Broda wrote: > Witam, > > napisałem forum i wyciągam z niego 5 ostatnich wiadomości, które > przeznaczone sa dla wszystkich. > Zapytanie wygląda następująco: > > SELECT forum_posts.* FROM forum_posts, forum_sections_grupy > WHERE forum_posts.id_topic='0' > AND forum_posts.id_section<>forum_sections_grupy.id_se ction > ORDER BY forum_posts.date DESC LIMIT 5 > > gdzie forum_posts to tabela z wiadomościami a forum_sections_grupy to > tabela łącząca sekcję forum (id_section) i grupy uprawnionych > użytkowników (id_grupy). > > Chodzi o to, żeby w ostatnich wiadomościach nie było takich, które > należą do sekcji zawierających jakiś wpis w tabeli forum_sections_grupy. > > Niestety to nie działa, jesli tabela forum_sections_grupy jest pusta. > Nie wyświetla wówczas żadnych wiadomości. > > Nawet takie zapytanie nic wówczas nie zwraca: > SELECT forum_posts.* FROM forum_posts, forum_sections_grupy > WHERE forum_posts.id_topic='0' > > Jeśli dodam jakikolwiek rekord do tabeli forum_sections_grupy wszystko > działa ok.
A próbowałeś dwa rekordy? ;)
-- P.M.
=?ISO-8859-2?Q?Cezary_Gr=B1dys?= - 10-02-2007 00:02
Użytkownik Broda napisał: > Witam, > > napisałem forum i wyciągam z niego 5 ostatnich wiadomości, które > przeznaczone sa dla wszystkich. > Zapytanie wygląda następująco: > > SELECT forum_posts.* FROM forum_posts, forum_sections_grupy > WHERE forum_posts.id_topic='0' > AND forum_posts.id_section<>forum_sections_grupy.id_se ction > ORDER BY forum_posts.date DESC LIMIT 5 > > gdzie forum_posts to tabela z wiadomościami a forum_sections_grupy to > tabela łącząca sekcję forum (id_section) i grupy uprawnionych > użytkowników (id_grupy). > > Chodzi o to, żeby w ostatnich wiadomościach nie było takich, które > należą do sekcji zawierających jakiś wpis w tabeli forum_sections_grupy. > > Niestety to nie działa, jesli tabela forum_sections_grupy jest pusta. > Nie wyświetla wówczas żadnych wiadomości. > > Nawet takie zapytanie nic wówczas nie zwraca: > SELECT forum_posts.* FROM forum_posts, forum_sections_grupy > WHERE forum_posts.id_topic='0' > > Jeśli dodam jakikolwiek rekord do tabeli forum_sections_grupy wszystko > działa ok. > > Jak powinienem zmodyfikować zapytanie żeby było ok? > Z góry bardzo dziękuję. >
Nie wiem czy dobrze zrozumiałem, bo trochę rano :) Ale chyba chodzi o coś w tym stylu:
SELECT forum_posts.* FROM forum_posts WHERE forum_posts.id_topic='0' AND forum_posts.id_section not in (select id_section from forum_sections_grupy ) ORDER BY forum_posts.date DESC LIMIT 5
-- Cezary Grądys czarekgr@wa.onet.pl
Broda - 10-02-2007 00:02
Paweł Matejski napisał(a):
>> Niestety to nie działa, jesli tabela forum_sections_grupy jest pusta. >> Nie wyświetla wówczas żadnych wiadomości. >> >> Nawet takie zapytanie nic wówczas nie zwraca: >> SELECT forum_posts.* FROM forum_posts, forum_sections_grupy >> WHERE forum_posts.id_topic='0' >> >> Jeśli dodam jakikolwiek rekord do tabeli forum_sections_grupy wszystko >> działa ok. > > A próbowałeś dwa rekordy? ;)
Ożesz!
Jak wobec tego stworzyć zapytanie, które wyciągnie mi rekordy z tabeli forum_posts mające taką wartość id_sections, która ani razu nie występuje w tabeli forum_sections_grupy?
-- broda
Broda - 10-02-2007 00:02
Cezary Grądys napisał(a):
> Nie wiem czy dobrze zrozumiałem, bo trochę rano :) > Ale chyba chodzi o coś w tym stylu: > > SELECT forum_posts.* FROM forum_posts > WHERE forum_posts.id_topic='0' > AND forum_posts.id_section not in > (select id_section from forum_sections_grupy ) > ORDER BY forum_posts.date DESC LIMIT 5
No cudnie!
Ja już za długo nad tym myślałem i nie mogłem sie wyrwać z pewnych schematów myślowych. Stworzyłem takiego potwora a i tak nie działało najlepiej :)
SELECT forum_posts . * FROM forum_posts, forum_sections_grupy WHERE forum_posts.id_topic = '0' AND forum_posts.id_section NOT IN ( SELECT forum_sections_grupy.id_section FROM forum_sections_grupy GROUP BY forum_sections_grupy.id_section ) GROUP BY forum_posts.id ORDER BY forum_posts.date DESC LIMIT 5
Po moich mękach twórczych twoje zapytanie wydaje mi się piekne nawet w kategoriach estetycznych ;) Działa jak złoto. Bardzo dziękuję.
-- broda
=?ISO-8859-2?Q?Pawe=B3_Matejski?= - 10-02-2007 00:02
Broda wrote: > Paweł Matejski napisał(a): > >>> Niestety to nie działa, jesli tabela forum_sections_grupy jest pusta. >>> Nie wyświetla wówczas żadnych wiadomości. >>> >>> Nawet takie zapytanie nic wówczas nie zwraca: >>> SELECT forum_posts.* FROM forum_posts, forum_sections_grupy >>> WHERE forum_posts.id_topic='0' >>> >>> Jeśli dodam jakikolwiek rekord do tabeli forum_sections_grupy wszystko >>> działa ok. >> >> A próbowałeś dwa rekordy? ;) > > Ożesz! > > Jak wobec tego stworzyć zapytanie, które wyciągnie mi rekordy z tabeli > forum_posts mające taką wartość id_sections, która ani razu nie > występuje w tabeli forum_sections_grupy?
Standarcik:
SELECT forum_posts.* FROM forum_posts LEFT JOIN forum_sections_grupy ON (forum_posts.id_section<>forum_sections_grupy.id_s ection) WHERE forum_posts.id_topic='0' AND forum_sections_grupy.id_section is null -- dowolna kolumna not null,
-- najlepiej pk ORDER BY forum_posts.date DESC LIMIT 5
-- P.M.
=?ISO-8859-2?Q?S=B3awomir_Szysz=B3o?= - 10-02-2007 00:02
=?ISO-8859-2?Q?Re:_Zapytanie_SQL_z_pust=B1_tabel=B1?=
Dnia Fri, 09 Feb 2007 06:56:16 +0100, Broda <rrudzinski@interia.pl> wklepał(-a):
>Po moich mękach twórczych twoje zapytanie wydaje mi się piekne nawet w >kategoriach estetycznych ;)
Piękne to jest zapytanie, które ma kilkaset wierszy, działa dobrze nawet na błędnych danych i jak patrzysz na nie po 3 miesiącach to nadal rozumiesz jak działa. ;)
MSPANC -- Sławomir Szyszło mailto:slaszysz@poczta.onet.pl Primus inter FAQires & Grand Inquisitor no.0 of pl.comp.bazy-danych FAQ pl.comp.bazy-danych http://www.dbf.pl/faq/ Archiwum http://groups.google.com/groups?grou...mp.bazy-danych
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
Wydajność baz danych w zależności od poziomu izolacji ANSI/ISO
Czy zna (obsługuje) ktoś program Iso Draw ?
Jak =?windows-1250?Q?pobra=E6_szacowan=B9_wielko=9C=E6_zbiory_wy nikowego_w_MS?==?windows-1250?Q?_SQL_2005=3F?=
MYSQL - kodowanie w ISO-PL
strona plus baza w iso do utf-8
Kodowanie: z iso na utf
[oracle] - Oracle SQL Developer - co to jest SID?
MS Sql Server 2000 i Server 2003
[MS SQL + kontakty outlook]CZy kontakty moge być zewnętrzne?
[oracle] Baza danych do kursy Introduction to Oracle9i:PL/SQL ? Skąd ją pobrać ?
zanotowane.pldoc.pisz.plpdf.pisz.planette.xlx.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|