Avatar billede inshadow Nybegynder
21. december 2001 - 14:23 Der er 10 kommentarer

Group by... eller...

!! Da jeg ikke har kunnet få hjælp på dk.edb.database, prøver jeg nu her istedet. !!

Jeg programmere i PHP og bruger hertil noget MySQL database... i den
forbindelse er jeg kommet frem til \'et godt spørgsmål\'!
Problemet er ikke uløseligt, hvis jeg benytter mig af PHP som problemløser. Men jeg kunne godt tænke mig at vide om det kan lade sig gøre uden hjælp fra PHP.

Har en tabel:
CREATE TABLE texts (
  textid mediumint(9) NOT NULL auto_increment,
  languageid char(2) NOT NULL default \'da\',
  textkey varchar(32) NOT NULL default \'\',
  textvalue text NOT NULL,
  PRIMARY KEY  (textid),
)

Eksempel:
1    da    kb1    tastatur1
2    en    kb1    keyboard1
3    da    mo5    skærm5
4    en    sc2    scanner2

I php har jeg så to variabler - en primær(da) og en sekundær(en) languageId.

I forhold til tabellen ovenover, skal det så altid være sådan her:
Når der vælges ud fra textkey (textkey = \'kb1\'), og det resulterer i 2
rækker med hvert sit languageid (prim. og sek.) skal den kun hente den række
med den primære languageid.
Dvs. textkey = \'kb1\' skal returnere rækken: 1 da kb1 tastatur1. (og kun
denne række)
Hvis textkey = \'mo5\' skal der returneres: 3 da mo5 skærm5
Hvis textkey = \'sc2\' skal der returneres: 4 en sc2 scanner2

Er det til at forstå?

På forhånd tak for hjælpen!

Med venlig hilsen
Stig

Avatar billede nordclc Nybegynder
21. december 2001 - 14:55 #1
Hmmm, er det dette du mener (i ASP):

<%
\' Databaseforbindelse - husk at angive sti til din database
Set Conn = Server.CreateObject(\"ADODB.Connection\")
DSN = \"DRIVER={Microsoft Access Driver (*.mdb)}; \"
DSN = DSN & \"DBQ=\" & Server.MapPath(\"/cgi-bin/database.mdb\")
Conn.Open DSN

sprog = Request.ServerVariables(\"HTTP_ACCEPT_LANGUAGE\")
v_textkey = \"kb1\"

\' SQL forespørgsel - med primær sprog
strSQL = \"select * from texts where textkey = v_textkey and languageid = sprog\"
Set rs = Conn.Execute(strSQL)

\' Check om record med primært sprog er fundet
if rs.EOF or rs.BOF then
  \' SQL forespørgsel - uden primær sprog
  strSQL = \"select * from texts where textkey = v_textkey\"
  Set rs = Conn.Execute(strSQL)
end if

if rs.EOF or rs.BOF then
  response.write \"Ingen records fundet\"
else
  Do
    Response.Write rs(\"textid\") & rs(\"languageid\") & rs(\"textkey\") & rs(\"textvalue\") & \"<br>\"
    rs.MoveNext
  Loop While Not rs.EOF
end if
%>
Avatar billede nordclc Nybegynder
21. december 2001 - 14:58 #2
He he, connection skal selvfølgelig rettes til din MySQL database! En lille copy/paste fejl!!
Avatar billede nordclc Nybegynder
21. december 2001 - 15:22 #3
Så må du nok uddybe lidt nærmere ;o)
Avatar billede inshadow Nybegynder
21. december 2001 - 15:24 #4
nordclc>
Det er også noget i den retning jeg har tænkt mig at gøre, hvis det er min eneste mulighed.
Men mit håb var jo at man kunne lave en query som kunne gi\' mig lige præcis de data jeg havde brug for, og ikke mere...
Hvis bare man kunne lave sub-selects i MySQL, ville det så vidt jeg kan se ikke være nær så svært at lave.
Avatar billede nordclc Nybegynder
21. december 2001 - 15:30 #5
Du kan på ingen måde få fat ved een forespørgsel! Hvordan ville du gøre det v.hj.a. subselect? Der er 4 perspektiver i dette:

1. 1 record med primært sprog
2. 1 record uden primært sprog
3. Flere records, hvoraf en med primært sprog
4. Flere records, hvoraf ingen er med primært sprog

Da rækkefølgen på primært sprog jo ikke altid er kronologisk, kan du ikke benytte en order by!
Avatar billede nordclc Nybegynder
21. december 2001 - 15:30 #6
Har jeg forstået det korrekt?

;o) Claus
Avatar billede lundsfryd Nybegynder
22. december 2001 - 17:30 #7
Hvis du kun har de to sprog, og da altid er primært, er der vel ikke noget galt i en ORDER BY? Jeg vedkender selvfølgelig gerne, at det er en smule fusket.

SELECT * FROM texts WHERE textkey = \'kb1\' ORDER BY languageid LIMIT 1
Avatar billede inshadow Nybegynder
22. december 2001 - 17:57 #8
Der kan nemt være flere sprog.
Avatar billede liit42 Nybegynder
24. august 2007 - 17:52 #9
SELECT * FROM texts GROUP BY languageid;

Du vil nu få den første række MySQL støder på, for hver unik languageid
Avatar billede liit42 Nybegynder
24. august 2007 - 18:15 #10
Hov, det var et svar, jeg er ny her :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester