Kom ihåg mig?
Home Menu

Menu


mysql/php

 
Ämnesverktyg Visningsalternativ
Oläst 2009-10-21, 22:21 #1
vco-systemss avatar
vco-systems vco-systems är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Dec 2004
Inlägg: 774
vco-systems vco-systems är inte uppkopplad
Mycket flitig postare
vco-systemss avatar
 
Reg.datum: Dec 2004
Inlägg: 774
Standard mysql/php

Jag har en tabell med en mängd texter och ska skapa en meny:
A(20) <-Antal texter som börjar på bokstaven A
B(12)
C(...)
osv.

Vad är bästa sättet att få fram hur många texter som börjar på vilken bokstav?
vco-systems är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-10-21, 22:28 #2
nosnaj nosnaj är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Mar 2005
Inlägg: 1 012
nosnaj nosnaj är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Mar 2005
Inlägg: 1 012
Utan att kollat så noga (dvs finns säkert bättre lösning) kan du köra substring och ta ut första bokstaven, sedan group by på detta. Räkningen gör du med sedvanlig count.
nosnaj är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-10-21, 22:29 #3
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
Såvida antalet texter inte ändras väldigt ofta så rekommenderar jag att du sparar antalet texter för respektive bokstav i en egen tabell i databasen. Kan texterna börja med annat än bokstäverna i svenska alfabetet (t.ex. en siffra) så får du tänka på hur du vill göra med dessa också.
__________________
Full-stack developer, free for smaller assignments
tartareandesire är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-10-21, 22:41 #4
youheardit youheardit är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Oct 2008
Inlägg: 1 168
youheardit youheardit är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Oct 2008
Inlägg: 1 168
Så här är en lösning:

Kod:
<?php
$result = mysql_query("SELECT * FROM texter WHERE text LIKE 'a%'");
// byta ut "texter" och "text" mot rätt tabellnamn och kolumm!
echo "A(".mysql_num_rows($result).")";

$result = mysql_query("SELECT * FROM texter WHERE text LIKE 'b%'");
// byta ut "texter" och "text" mot rätt tabellnamn och kolumm!
echo "B(".mysql_num_rows($result).")";

$result = mysql_query("SELECT * FROM texter WHERE text LIKE 'c%'");
// byta ut "texter" och "text" mot rätt tabellnamn och kolumm!
echo "C(".mysql_num_rows($result).")";
hoppas jag förstått dig rätt! så som jag tolkade det så är detta en lösning!
youheardit är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-10-21, 22:50 #5
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
Citat:
Ursprungligen postat av youheardit Visa inlägg
Så här är en lösning:

Kod:
<?php
$result = mysql_query("SELECT * FROM texter WHERE text LIKE 'a%'");
// byta ut "texter" och "text" mot rätt tabellnamn och kolumm!
echo "A(".mysql_num_rows($result).")";

$result = mysql_query("SELECT * FROM texter WHERE text LIKE 'b%'");
// byta ut "texter" och "text" mot rätt tabellnamn och kolumm!
echo "B(".mysql_num_rows($result).")";

$result = mysql_query("SELECT * FROM texter WHERE text LIKE 'c%'");
// byta ut "texter" och "text" mot rätt tabellnamn och kolumm!
echo "C(".mysql_num_rows($result).")";
hoppas jag förstått dig rätt! så som jag tolkade det så är detta en lösning!
Du kan köra count(*) istället. Men detta är knappast ett alternativ alls om samtliga ska visas vilket jag förstod det som?
__________________
Full-stack developer, free for smaller assignments
tartareandesire är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-10-22, 09:46 #6
Magnus_A Magnus_A är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: May 2006
Inlägg: 2 604
Magnus_A Magnus_A är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: May 2006
Inlägg: 2 604
Välj ut efter ett kriterium, typ första bokstaven, som ett separat fält i din sql-sats, samt ett fält med count(titeln). Sen grupperar du efter hela titeln och den första bokstaven, med wth-rollup. Då får du fram en extra rad med delsumman av antalet.
Pseudo-kod :
Citat:
select
substring(text,1,1) as första_bokstav,
count(text) as antal
from tabell
group by (första_bokstav) with rollup
mer läsning på http://dev.mysql.com/doc/refman/5.0/...modifiers.html (engelska)

Vill du ha ut alla texter i ordning och delsumma för varje första bokstav skriver du så här:
Citat:
select
substring(text,1,1) as första_bokstav,
count(text) as antal,
text
from tabell
group by
första_bokstav,text
with rollup
Extraraden med NULL i text-fältet innehåller delsumman för varje bokstav.

Senast redigerad av Magnus_A den 2009-10-22 klockan 10:08 Anledning: mer
Magnus_A är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-10-22, 20:40 #7
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
Jag tycker det ligger på allas ansvar att skriva så resurssnåla applikationer som möjligt oavsett om man har en sida med 100 eller 100 000 besökare om dagen och håller fortfarande på mitt inledande förslag (förutsatt att det inte ändras alltför ofta då).
__________________
Full-stack developer, free for smaller assignments
tartareandesire är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-10-24, 01:09 #8
taz76 taz76 är inte uppkopplad
Flitig postare
 
Reg.datum: Jan 2008
Inlägg: 388
taz76 taz76 är inte uppkopplad
Flitig postare
 
Reg.datum: Jan 2008
Inlägg: 388
+1 tartareandesire

Bara för att dagens servrar ofta är stora och snabba betyder inte det att man ska skriva en applikation som skickar en massa frågor när man kan göra en enkel lösning som en tabell som sparar antal och då behövs bara en fråga till databasen.
taz76 är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 22:57.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017