ďťż
 
[mysql] select laczacy pola ďťż
 
[mysql] select laczacy pola
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

[mysql] select laczacy pola



- 06-04-2007 00:03
[mysql] select laczacy pola
  Witam,
Mam ankiete w tabelce. Wyswietlam ile procent osob wybralo jakas odpowiedz
(z mozliwych) na pytanie p10:

SELECT p10 as wariant,count(p10)*100/250 AS procent FROM `ankieta` group by
p10 desc

Wszystkich rekordow jest oczywiscie 250.
Problem jest jednak taki, ze chce jednoczesnie zrobic to samo dla pytanie
p11 i wyniki, ktore dostane polaczyc z tymi dla p10 tak jakby to byla jedna
tabela, tzn. zeby dostac 1 tabelka zawierajaca opcje obu pytan:

wariant | procent
----------------
opcja 1 | 78%

Mam nadzieje, ze jest to w miare jasne.
Jak mozna cos takiego zrobic?

Pozdrawiam,
Talthen





- 06-04-2007 00:03

  Dodam, ze uzywam MySQL 3.23, gdzie nie dziala UNION (najwyrazniej...)

P.,
Talthen




Damian 'legion' Szuberski - 06-04-2007 00:03

  On 2007-04-05, <talthen.z-serwera.o2@nospam.pl> wrote:
> Dodam, ze uzywam MySQL 3.23, gdzie nie dziala UNION (najwyrazniej...)
Zmień na coś nowocześniejszego...

--
Damian Szuberski




=?ISO-8859-2?Q?Pawe=B3_Matejski?= - 06-04-2007 01:07

  talthen.z-serwera.o2@nospam.pl wrote:
> Witam,
> Mam ankiete w tabelce. Wyswietlam ile procent osob wybralo jakas odpowiedz
> (z mozliwych) na pytanie p10:
>
> SELECT p10 as wariant,count(p10)*100/250 AS procent FROM `ankieta` group by
> p10 desc

Co tu liczy count(p10)? To zwraca coś innego niż 100%?

> Wszystkich rekordow jest oczywiscie 250.

A jak dojdzie nowy rekord, to będziesz zmieniał zapytania?

> Problem jest jednak taki, ze chce jednoczesnie zrobic to samo dla pytanie
> p11 i wyniki,

Mam rozumieć, że dla każdego pytania masz osobną kolumnę? To jest bardzo zły
projekt bazy.

> ktore dostane polaczyc z tymi dla p10 tak jakby to byla jedna
> tabela, tzn. zeby dostac 1 tabelka zawierajaca opcje obu pytan:

Jedna tabela? A skąd ta druga?

> wariant | procent
> ----------------
> opcja 1 | 78%
>
> Mam nadzieje, ze jest to w miare jasne.

Absolutnie nie.

> Jak mozna cos takiego zrobic?

Albo poprawić strukturę bazy albo nowsza wersja... Ale jednak sugeruje poprawić
strukturę bazy niezależnie od wersji.

--
P.M.





- 07-04-2007 00:03

  Użytkownik "Paweł Matejski" <madej@spam.madej.pl.eu.org> napisał

>> SELECT p10 as wariant,count(p10)*100/250 AS procent FROM `ankieta` group
>> by
>> p10 desc
>
> Co tu liczy count(p10)? To zwraca coś innego niż 100%?
Zwraca co innego, bo jest grupowanie tych samych odpowiedzi.

>> Wszystkich rekordow jest oczywiscie 250.
>
> A jak dojdzie nowy rekord, to będziesz zmieniał zapytania?
Nie, te 250 jest pobierane znacznie wczesniej- po prostu zapytan mam nascie
i wszedzie jest 250.

>> Problem jest jednak taki, ze chce jednoczesnie zrobic to samo dla pytanie
>> p11 i wyniki,
>
> Mam rozumieć, że dla każdego pytania masz osobną kolumnę? To jest bardzo
> zły
> projekt bazy.
Moze, ale byl taki wymog- 30 pytan (wiec 30 kolumn) i kazda wypelniona
ankieta ma trafic do bazy jako nowy rekord (zeby mozna bylo przegladac
rekordy, np. jesli ankietowany ma 20-30 lat, to jak odpowiedzial na pytanie
numer 5, a jak na 6).

>> ktore dostane polaczyc z tymi dla p10 tak jakby to byla jedna
>> tabela, tzn. zeby dostac 1 tabelka zawierajaca opcje obu pytan:
>
> Jedna tabela? A skąd ta druga?
Zle napisalem. Lepsze byloby okreslenie tablica. Jedna tablica to wynik
pierwszego zapytania, a druga to wynik drugiego zapytania.

> Albo poprawić strukturę bazy albo nowsza wersja... Ale jednak sugeruje
> poprawić
> strukturę bazy niezależnie od wersji.

A jak mozna poprawic strukture w takiej sytuacji?
Nowszej wersji bazy nie da rady. Mam 3.23, a od 4 jest UNION, ktore to by
rozwiazalo moj problem.

Pozdrawiam,
Talthen




=?ISO-8859-2?Q?Pawe=B3_Matejski?= - 07-04-2007 00:03

  talthen.z-serwera.o2@nospam.pl wrote:
> Użytkownik "Paweł Matejski" <madej@spam.madej.pl.eu.org> napisał
>
>>> SELECT p10 as wariant,count(p10)*100/250 AS procent FROM `ankieta` group
>>> by
>>> p10 desc
>> Co tu liczy count(p10)? To zwraca coś innego niż 100%?
> Zwraca co innego, bo jest grupowanie tych samych odpowiedzi.

No może przesadziłem z tymi 100%, ale dlaczego nie dajesz count(*)?
Liczenie po kolumnach daje się tylko wtedy, gdy chcemy pominąć rekordy z null w
tej kolumnie.

>>> Wszystkich rekordow jest oczywiscie 250.
>> A jak dojdzie nowy rekord, to będziesz zmieniał zapytania?
> Nie, te 250 jest pobierane znacznie wczesniej- po prostu zapytan mam nascie
> i wszedzie jest 250.
>
>>> Problem jest jednak taki, ze chce jednoczesnie zrobic to samo dla pytanie
>>> p11 i wyniki,
>> Mam rozumieć, że dla każdego pytania masz osobną kolumnę? To jest bardzo
>> zły
>> projekt bazy.
> Moze, ale byl taki wymog- 30 pytan (wiec 30 kolumn) i kazda wypelniona
> ankieta ma trafic do bazy jako nowy rekord (zeby mozna bylo przegladac
> rekordy, np. jesli ankietowany ma 20-30 lat, to jak odpowiedzial na pytanie
> numer 5, a jak na 6).

Z tego wymogu nie wynika jaka ma być struktura bazy. Raczej co jest oczekiwane
na wyjściu. Możliwe, że takie podejście ułatwia uzyskanie typowego widoku
tabelki, ale właśnie w ciut bardziej skomplikowanych kwestiach stwarza problemy.
Nie do rozwiązani w tak starej bazie.

>>> ktore dostane polaczyc z tymi dla p10 tak jakby to byla jedna
>>> tabela, tzn. zeby dostac 1 tabelka zawierajaca opcje obu pytan:
>> Jedna tabela? A skąd ta druga?
> Zle napisalem. Lepsze byloby okreslenie tablica. Jedna tablica to wynik
> pierwszego zapytania, a druga to wynik drugiego zapytania.

Teraz też nie lepiej. W informatyce tabela to TABLE, tablica to array. A nie
sądzę, żeby o to Ci o takie tablice chodziło...

>> Albo poprawić strukturę bazy albo nowsza wersja... Ale jednak sugeruje
>> poprawić
>> strukturę bazy niezależnie od wersji.
>
> A jak mozna poprawic strukture w takiej sytuacji?

Tabela powinna mieć takie kolumny (osoba, pytanie, wartość)

> Nowszej wersji bazy nie da rady. Mam 3.23, a od 4 jest UNION, ktore to by
> rozwiazalo moj problem.

Napewno, bo w tej sytuacji to wydaje się najprostszym rozwiązaniem.

P.S. Piszą, że to co napisałeś nie jest zbyt jasne miałem na mysli:

> Problem jest jednak taki, ze chce jednoczesnie zrobic to samo dla pytanie
> p11 i wyniki, ktore dostane polaczyc z tymi dla p10 tak jakby to byla jedna
> tabela, tzn. zeby dostac 1 tabelka zawierajaca opcje obu pytan:

To, sugeruje, że chcesz mieć wyniki dla obu w jednej tabelce

> wariant | procent
> ----------------
> opcja 1 | 78%

To, że chcesz je "zsumować".

--
P.M.




- 07-04-2007 00:03

  Użytkownik "Paweł Matejski" <madej@spam.madej.pl.eu.org> napisał
> Teraz też nie lepiej. W informatyce tabela to TABLE, tablica to array. A
> nie
> sądzę, żeby o to Ci o takie tablice chodziło...
Wlasnie o to mi chodzilo. Select pobiera dane z tabeli (TABLE) i zwraca do
PHP jako tablica (ARRAY).
Dane biore z jednej tabeli (ankieta), ale dwoma selectami wiec dostaje dwie
tablice (array). I chodzilo o to, zeby polaczyc tablice.

> Tabela powinna mieć takie kolumny (osoba, pytanie, wartość)
Kazda osoba musi odpowiedziec niemal na kazde pytanie (na 3 moze nie
odpowiadac). Przy Twojej wersji bede mial mniej kolumn, ale wiecej rekordow.
Sumarycznie bedzie danych wiecej, bo
u mnie jesli mam 30 pytan, to mam 1 rekord w 31 kolumnach (30 pytan +
kolumna id), u Ciebie bedzie 30 rekordow w 4 kolumnach (bo jeszcze kolumna
id).

> To, sugeruje, że chcesz mieć wyniki dla obu w jednej tabelce

> To, że chcesz je "zsumować".

Chce UNION :P

Pozdrawiam,
Talthen




=?ISO-8859-2?Q?Pawe=B3_Matejski?= - 07-04-2007 00:03

  talthen.z-serwera.o2@nospam.pl wrote:
> Użytkownik "Paweł Matejski" <madej@spam.madej.pl.eu.org> napisał
>> Teraz też nie lepiej. W informatyce tabela to TABLE, tablica to array. A
>> nie
>> sądzę, żeby o to Ci o takie tablice chodziło...
> Wlasnie o to mi chodzilo. Select pobiera dane z tabeli (TABLE) i zwraca do
> PHP jako tablica (ARRAY).
> Dane biore z jednej tabeli (ankieta), ale dwoma selectami wiec dostaje dwie
> tablice (array). I chodzilo o to, zeby polaczyc tablice.
>
>> Tabela powinna mieć takie kolumny (osoba, pytanie, wartość)
> Kazda osoba musi odpowiedziec niemal na kazde pytanie (na 3 moze nie
> odpowiadac). Przy Twojej wersji bede mial mniej kolumn, ale wiecej rekordow.
> Sumarycznie bedzie danych wiecej, bo
> u mnie jesli mam 30 pytan, to mam 1 rekord w 31 kolumnach (30 pytan +
> kolumna id), u Ciebie bedzie 30 rekordow w 4 kolumnach (bo jeszcze kolumna
> id).

Tu nie chodzi o oszczędność miejsca a o większą elastyczność struktury.
A jeśli chcesz oszczędności to stosujesz tablice słownikowe i wtedy przynajmniej
3 kolumny będziesz miał typu int. I cieszysz się, że masz pięknie znormalizowaną
strukturę.

>> To, sugeruje, że chcesz mieć wyniki dla obu w jednej tabelce
>
>> To, że chcesz je "zsumować".
>
> Chce UNION :P

W obydwu przypadkach jest potrzebny.
Zapytam inaczej, potrzebujesz:

select pytanie, wartość, count(*) from tab where pytanie in ('p10','p11');

czy

select wartość, count(*) from tab where pytanie in ('p10','p11');

Zresztą to nie ma znaczenia. Przy Twojej strukturze nie otrzymasz wyniku bez UNION.

--
P.M.




- 08-04-2007 00:02

  Użytkownik "Paweł Matejski" <madej@spam.madej.pl.eu.org> napisał
> W obydwu przypadkach jest potrzebny.
> Zapytam inaczej, potrzebujesz:
>
> select pytanie, wartość, count(*) from tab where pytanie in ('p10','p11');
>
> czy
>
> select wartość, count(*) from tab where pytanie in ('p10','p11');

W zasadzie to to.

> Zresztą to nie ma znaczenia. Przy Twojej strukturze nie otrzymasz wyniku
> bez UNION.
Chyba jednak pomysle nad zmiana struktury.

Pozdrawiam,
Talthen
--
Zycze Wam krolika z taaakimi jajami :P




=?ISO-8859-2?Q?Pawe=B3_Matejski?= - 08-04-2007 00:02

  talthen.z-serwera.o2@nospam.pl wrote:
> Użytkownik "Paweł Matejski" <madej@spam.madej.pl.eu.org> napisał
>> W obydwu przypadkach jest potrzebny.
>> Zapytam inaczej, potrzebujesz:
>>
>> select pytanie, wartość, count(*) from tab where pytanie in ('p10','p11');
>>
>> czy
>>
>> select wartość, count(*) from tab where pytanie in ('p10','p11');
>
> W zasadzie to to.

Kurcze... zapomniałem o group by, ale widzę, że się domyśliłeś. ;)

>> Zresztą to nie ma znaczenia. Przy Twojej strukturze nie otrzymasz wyniku
>> bez UNION.
> Chyba jednak pomysle nad zmiana struktury.

--
P.M.
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    [mysql] =?ISO-8859-2?Q?Za=E6mienie=2E=2E=2E_jak_wy=B6wietli=E6?==?ISO-8859-2?Q?=2E=2E=2E?= [mysql] =?ISO-8859-2?Q?wielko=B6=E6_bazy_a_stabilno=B6=E6=2C?==?ISO-8859-2?Q?_podzia=B3_du=BFej_bazy_a_powi=B1zania_tabel?= [MySQL] =?ISO-8859-2?Q?Wy=B6wietlenie_kolejnej_pozycji=2C_?==?ISO-8859-2?Q?jak=B1_mia=B3by_dany_rekord=2C_gdybym_czyta=B3 _?==?ISO-8859-2?Q?wg_konkretnych_kryteri=F3w=2E_Da_si=EA_=3F?= [mysql 4.0.x] przenoszenie kolum =?ISO-8859-2?Q?mi=EAdzy_bazam?==?ISO-8859-2?Q?i_cd_=2E=2E=2E_?= [MySQL] =?ISO-8859-2?Q?z=B3=B1czenie_tabeli_u=BFytkownik_i?==?ISO-8859-2?Q?_zdj=EAcia_z_wyborem_zdj=EAcia_domy=B6lnego?= [MySQL] Jak =?ISO-8859-2?Q?wpisa=E6_do_tabeli_pozycje_dl?==?ISO-8859-2?Q?a_wierszy_gdybym_te_wiersze_wybiera=B3_w_ok?== ?ISO-8859-2?Q?re=B6lonej_kolejno=B6ci_=3F?= Gdzie MySQL 4.1, a gdzie 5.0? [MySQL 4.0...4.1] zabezpieczenie przed =?ISO-8859-2?Q?jednoczesn?==?ISO-8859-2?Q?=B1_edycj=B1?= [MS SQL] "set names" (mySQL) w MS SQL [mysql 5.x] jak =?ISO-8859-2?Q?zrealizowa=E6_zapytanie=3F_cz?==?ISO-8859-2?Q?yli_podzapytanie_i_wi=EAcej_ni=BF_jeden_rz=B1? ==?ISO-8859-2?Q?d_wynik=F3w?=
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • oefg.opx.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

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com