Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Group by » CaSe SenSitive

[es] :: MySQL :: Group by » CaSe SenSitive

[ Pregleda: 5093 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

gagi
Dragan N.
Ottawa, Canada

Član broj: 166
Poruke: 162
*.travel-net.com.

ICQ: 28662024
Sajt: www.z8m.net


Profil

icon Group by » CaSe SenSitive21.12.2004. u 00:36 - pre 235 meseci
Zdravo,

Evo nesto pokusavam pa sam zaglavio, Googlirao sam ali bruka ...


Trebam da izvucem podakte iz baze ali da ih organizujem po kategorijama, so ..
I guess trebam koristiti "GROUP BY". Ovako mi nesto treba ...

New York
- Reklama 1
- Reklama 2
- ...

Chicago
- Reklama 1
- Reklama 2

...
itd.

Znaci da orgnizujem po gradu ... e sada gdje sam zapeo. Ljudi unesu ime grada po kojem ja poslje trebam da organizujem. Ako je neko New York napisao: NEW YORK, New York lii new york napravit ce mi tri kategorije a ja bih to zelio kao jednu kategoriju npr. New York.

Hvala!
DDSD!
 
Odgovor na temu

utvara
Slobodan Utvić
Vivvo CMS lead developer, Spoonlabs
d.o.o. Beograd

Član broj: 677
Poruke: 87
*.sbb.co.yu
Via: [es] mailing liste

Jabber: utvara@elitesecurity.org
ICQ: 28140625
Sajt: utvara.blogspot.com


Profil

icon Re: Group by » CaSe SenSitive21.12.2004. u 09:33 - pre 235 meseci
GROUP BY UCASE(city) ??

--
Sve najlepse,
Best regards,
Slobodan
 
Odgovor na temu

gagi
Dragan N.
Ottawa, Canada

Član broj: 166
Poruke: 162
*.travel-net.com.

ICQ: 28662024
Sajt: www.z8m.net


Profil

icon Re: Group by » CaSe SenSitive21.12.2004. u 15:21 - pre 235 meseci
Hvala.

Probao sam UPPER/UCASE ali ne radi tj. nista mi ne pokaze kao da nista ne odgovaram tim kriterijama. Ako npr. koristim UPPER('city') onda mi samo izbaci gradove koji su ispisani velikim.


Tek sam poceo da ucim PHP/MySQL pa sam mozda negdje drugo gresku uradio ... evo pogledaj code, pa mozda nesto drugo primjetis ...

btw. city = u_address

Code:
<?php
require 'db_connect.php';

if ($logged_in == 0) {
    echo 'Access Forbidden!';
} else {


// 1 - expired
// 0 - not expired

// ##### Take ads that expires today and are not set as expired #####
$query="SELECT * FROM classified WHERE ex_date=CURDATE() AND expired='0'";
$result=mysql_query($query);
$row=mysql_fetch_array($result);
$num=mysql_numrows($result);


$i=0;
while ($i < $num) {
$id=mysql_result($result,$i,"id");

// ##### Now set as expired ##### 
$setexpire="UPDATE classified SET expired='1' WHERE id='$id'";
$update=mysql_query($setexpire);
$i++;
}


// ##### Old ads are set as expired #####
// ##### Now display approved and not expired ads #####
$query="SELECT * FROM classified WHERE approved='1' AND expired='0'";
$result=mysql_query($query);
$num=mysql_numrows($result);

mysql_close();
  
// VARIABLES/////////////////////////
//$ex_in = 60; //default: expire in 60days
//$ex_date = date ("Y-m-d", mktime(0, 0, 0, date("m"), date("d")+$ex_in, date("Y")));
/////////////////////////////////////

if ($num == 0) { echo "<center><b>NO CLASSIFIED YET</b></center>"; }
else {
echo "<center><b>ALL CLASSIFIEDS<br></b>You have a total of $num classifieds</center>";


$i=0;
while ($i < $num) {
echo "<br>";
$u_headline=mysql_result($result,$i,"u_headline");
$u_content=mysql_result($result,$i,"u_content");
$u_address=mysql_result($result,$i,"u_address");
$ex_date=mysql_result($result,$i,"ex_date");

echo "$u_address<br><b>$u_headline</b><br>$u_content<br><font size=1>expire: $ex_date</font><br><br><br>";

$i++;
}
}
}
?>


DDSD!
 
Odgovor na temu

gagi
Dragan N.
Ottawa, Canada

Član broj: 166
Poruke: 162
*.travel-net.com.

ICQ: 28662024
Sajt: www.z8m.net


Profil

icon Re: Group by » CaSe SenSitive21.12.2004. u 21:50 - pre 235 meseci
Hmmm, izgleda da mi treba ORDER BY a ne GROUP BY

Ovo mi je neki tip s'Dev Shed rekao ...

Citat:

To do what you want is best done in the your presentation layer. Use order by and keep track of when the value of city changes in which case you should display the name of the city.


Group by will return one record for each occurence of the columns in the group by clause.

E.g

Code:

T1:

A | B | C
---------
1 1 2
1 2 1
2 1 3

select a,count(*) from t1 group by a



will return

Code:

A |
------
1 2
2 1



The foremost use of group by is to do aggregations over all rows within a group.

Your group by queries are not well formed since you have columns in the select-clause that is not part of the group by clause. Actually, any other DBMS than Mysql would not allow it since the result is uncpredictable.

Given the same values in T1

Code:

select a,b from t1 where a = 1 group by a



which value of B should be returned? 1 or 2? Mysql will randomly give you one of those.

Another common mistake

Code:

select a,b,max(c) from t1 where a = 1 group by a



in this case many people assume that the value of B will be taken from the record where the max value of C is found but again the value of B is randomly choosen within the group.

So, when using group by all non-aggregated columns in the select list should be present in the group by clause.

DDSD!
 
Odgovor na temu

Riste Pejov
Team Leader/Senior Software Developer @
Ein-Sof ltd Skopje
Skopje, Macedonia

Član broj: 128
Poruke: 571
217.16.77.*

Jabber: richie@bagra.net.mk
ICQ: 154236769
Sajt: riste.softver.org.mk


Profil

icon Re: Group by » CaSe SenSitive22.12.2004. u 11:51 - pre 235 meseci
Citat:
gagi: Hvala.

Probao sam UPPER/UCASE ali ne radi tj. nista mi ne pokaze kao da nista ne odgovaram tim kriterijama. Ako npr. koristim UPPER('city') onda mi samo izbaci gradove koji su ispisani velikim.


Pa da, i treba da izbaci gradove koji su samo sa velikim slovima, zatoa trebas i kolonu u selectu UCASE-ovati. Primer:

SELECT aggregate_func(neka_kolona), UCASE(city) FROM TABLE_NAME GROUP BY UCASE(city);

i dobijes nesto kao:

expression | city
-----------------
1 NEW YORK
3 MADRID
2 PARIS
People who think they know everything tend to irritate those of us who do.
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+711 Profil

icon Re: Group by » CaSe SenSitive22.12.2004. u 12:30 - pre 235 meseci
Citat:
gagi: Hmmm, izgleda da mi treba ORDER BY a ne GROUP BY
Ovo mi je neki tip s'Dev Shed rekao ...

Lepo ti je rekao, ne treba ti uopšte GROUP BY, ne znam odakle ti u startu ta ideja.
Jednostavno sortiraš po UCASE(city) i onda kad uzimaš sledeći red u php-u, proveriš da li je polje grad isto kao u prethodnom redu. Ako nije isto, odštampaš neki separator u kome ćeš navesti novo ime grada.

BTW, tim likovima sa devshed-a svaka čast na strpljenju.
 
Odgovor na temu

gagi
Dragan N.
Ottawa, Canada

Član broj: 166
Poruke: 162
*.travel-net.com.

ICQ: 28662024
Sajt: www.z8m.net


Profil

icon Re: Group by » CaSe SenSitive22.12.2004. u 20:48 - pre 235 meseci
Ako stavim UPPER izbaci mi samo sto je veliko; NEW YORK a ostalo (New York i new york) ignjorise tj. nista mi ne pokaze. Zato pitam gdje gresim, jer ne znam ...


@Jablan

Meni treba da spoji NEW YORK, New York i new york u jedan grdan: New York. Mislio sam s'opcijom GROUP BY da to mogu izvesti (spojiti gradove). Covjek mi je objasnio zasto ne moze, nisam najbolje shvatio, uzeo sam i citao malo vise oko toga ... i sada znam.

Nego, da znam rjesenje nebi sigurno postavio pitanje. Prije nego sto sam postavio temu, uradio sam svoj "posao"; probavao i probavao, citao, trazio po googl-u i kad vidim da mi ne ide dalje, ne kontam nista vise ... postavio sam pitanje. Ako si neki n4drkan covjek i nemas vremena da odgovras i ne zelis da pomognes, mislim da ti ovde nije mjesto.

Hvala onim koji su pomogli ...
Ne treba mi vise pomoc, snacu se sam.
DDSD!
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+711 Profil

icon Re: Group by » CaSe SenSitive23.12.2004. u 10:00 - pre 235 meseci
Citat:
gagi: Ako stavim UPPER izbaci mi samo sto je veliko; NEW YORK a ostalo (New York i new york) ignjorise tj. nista mi ne pokaze. Zato pitam gdje gresim, jer ne znam ...

Gde staviš UPPER? Okači upit koji koristiš. Za početak, upit treba da ti proradi iz konzole, lako ćeš ga posle iskoristiti u koodu.
Citat:
Ako si neki n4drkan covjek i nemas vremena da odgovras i ne zelis da pomognes, mislim da ti ovde nije mjesto.

Ne znam odakle ti to da sam nadrkan i ne želim da pomognem? Samo sam iskazao divljenje prema liku koji ti je odgovorio onakvim čaršafom na jednostavno pitanje.
 
Odgovor na temu

Riste Pejov
Team Leader/Senior Software Developer @
Ein-Sof ltd Skopje
Skopje, Macedonia

Član broj: 128
Poruke: 571
217.16.77.*

Jabber: richie@bagra.net.mk
ICQ: 154236769
Sajt: riste.softver.org.mk


Profil

icon Re: Group by » CaSe SenSitive24.12.2004. u 14:12 - pre 235 meseci
gagi:

Prvo moras koristiti GROUP BY za da dobijes kumulativne rezultate, ko ti je rekao da ti treba ORDER BY valjda je zeleo da te samo skine sa vrata.

Citat:
Riste Pejov:
SELECT aggregate_func(neka_kolona), UCASE(city) FROM TABLE_NAME GROUP BY UCASE(city);


Neznam zasto uopste nisi pokusao ono sto sam ja napisao ? To je pravo resenje imas jednu kolonu koju zelis da grupiras, sve ostale kolona ulaze u group by klauzi i svi imaju UPPER/UCASE gde god i da se nalaze.

A ideja da to resavas u PHP-u umesto u samoj bazi je meni smesna. Ako se radi o PHP problemu prebaci temu u PHP forum.

btw. dizajn samo baze ne valja, za da se ne desavaju ovaki problemi kao tvoj, separiras grad u posebnu tabelu koja ce imate dva polja ID, IME_GRADA.

Pogledaj top teme u forumu Baze podataka http://www.elitesecurity.org/tema/10103
People who think they know everything tend to irritate those of us who do.
 
Odgovor na temu

[es] :: MySQL :: Group by » CaSe SenSitive

[ Pregleda: 5093 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.