/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
[MySQL] Hjælp med queries
Fra : Michael Alø-Nielsen


Dato : 15-07-03 14:12

Jeg har en tabel i min database kaldet musikcitater, som ser således ud:

id int(8) NOT NULL auto_increment,
citat varchar(255) NOT NULL default '',
oprindelse varchar(255) NOT NULL default '',
PRIMARY KEY (id)

Jeg har så lavet en form til at indtaste citater i databasen, som ved submit
sender følgende:

mysql_query ("INSERT INTO musikcitater ( id , kunstner , oprindelse ) VALUES
( '', '$kunstner', '$oprindelse' )");

Det fungerer også fint nok!

Men nu kommer vi så til kernen i mit spørgsmål!
Jeg vil lave et tjek på hvad det næste id, der tildeles automatisk i
databasen er, og hvis det næste id ender på 1 (altså, 1, 11, 21, 31, 41, 51
osv.) skal der indsættes en helt bestemt række i tabellen som er ens for
alle de id'er der ender på 1. Derefter skal det citat der blev indtastet i
min form så sættes ind.

Altså:
Hvis ikke næste id ender på 1 indsættes det der blev tastet i formen.
Hvis næste id ender på 1 indsættes først min specielle række, og derefter
det der blev indtastet i formen...

Dernæst vil jeg gerne lave en sammentælling af alle rækkerne i databasen,
men undtaget de id'er der ender på 1.
(det skal så skrives ud i mit php-dokument.)

Er det til at forstå hvad jeg mener?
....Og hvis ja, hvordan gør jeg så lige det?

/Michael.



 
 
Michael Alø-Nielsen (15-07-2003)
Kommentar
Fra : Michael Alø-Nielsen


Dato : 15-07-03 14:24

"Michael Alø-Nielsen" <m-alo@hotpop.com> skrev i en meddelelse
news:3f13fe0d$0$24711$edfadb0f@dread14.news.tele.dk...

> mysql_query ("INSERT INTO musikcitater ( id , kunstner , oprindelse )
VALUES
> ( '', '$kunstner', '$oprindelse' )");

Ups... kunstner udskiftes selvfølgelig med citat i ovenstående query (jvnf.
min tabel).

/Michael.



Jesper Brunholm (15-07-2003)
Kommentar
Fra : Jesper Brunholm


Dato : 15-07-03 15:18

Michael Alø-Nielsen wrote:

> Jeg har en tabel i min database kaldet musikcitater, som ser således ud:
>
> id int(8) NOT NULL auto_increment,
> citat varchar(255) NOT NULL default '',
> oprindelse varchar(255) NOT NULL default '',
> PRIMARY KEY (id)
>
> Jeg har så lavet en form til at indtaste citater i databasen, som ved submit
> sender følgende:
>
> mysql_query ("INSERT INTO musikcitater ( id , kunstner , oprindelse ) VALUES
> ( '', '$kunstner', '$oprindelse' )");

> Men nu kommer vi så til kernen i mit spørgsmål!
> Jeg vil lave et tjek på hvad det næste id, der tildeles automatisk i
> databasen er, og hvis det næste id ender på 1 (altså, 1, 11, 21, 31, 41, 51
> osv.) skal der indsættes en helt bestemt række i tabellen som er ens for
> alle de id'er der ender på 1. Derefter skal det citat der blev indtastet i
> min form så sættes ind.

Det lyder (undskyld jeg siger det) ikke som en relationsdatabase som er
normaliseret.
Sagt på en anden måde tror jeg at du kan opnå det du vil smartere, uden
at skulle ud i en masse trick og hacks som næsten er at misbruge
databasen

HVIS det imidlertid ikke er tilfældet (eller hvis du insisterer på at
gøre det du beder om hjælp til) er du efter min bedste overbevisning
nødt til at lave et script som henter max(id) ud og undersøger om den
slutter på 1. Jeg kan se nedenfor at du bruger php, så vil substr(-1)
give dig sidste position i den variabel som du trækker id ud i.

> Altså:
> Hvis ikke næste id ender på 1 indsættes det der blev tastet i formen.
> Hvis næste id ender på 1 indsættes først min specielle række, og derefter
> det der blev indtastet i formen...

> Dernæst vil jeg gerne lave en sammentælling af alle rækkerne i databasen,
> men undtaget de id'er der ender på 1.

Igen: det lyder altså forkert det her, men
SELECT COUNT(id) FROM tabel WHERE RIGHT(ID,1) !='1'

burde vist kunne gøre det

mvh

Jesper Brunholm


--
Phønix - dansk folk-musik i front - <http://www.phonixfolk.dk/>
H.C. Andersen-Centret med nyt design: <http://www.andersen.sdu.dk/>


Michael Alø-Nielsen (15-07-2003)
Kommentar
Fra : Michael Alø-Nielsen


Dato : 15-07-03 15:40


"Jesper Brunholm" <nospam@brunholm-scharff.dk> skrev i en meddelelse
news:3F140D22.1000202@brunholm-scharff.dk...

> Det lyder (undskyld jeg siger det) ikke som en relationsdatabase som er
> normaliseret.

Jeg er ganske nybegynder udi databaser, og er desværre ikke lige helt med på
hvad normalisering dækker over...

> Sagt på en anden måde tror jeg at du kan opnå det du vil smartere, uden
> at skulle ud i en masse trick og hacks som næsten er at misbruge
> databasen

Aha... Ok, hvis det kan gøres smartere, vil jeg da meget gerne hvide
hvordan?

Tillad mig lige at forklare hvad jeg gerne vil opnå:
Jeg vil på min hjemmeside gerne vise et tilfældigt musikcitat fra min
database...
(Hidtil har jeg gjort det via en almindelig tekstfil og et php-script, men
tænkte at det måske ville være smartere med en database efterhånden som der
kommer flere og flere citater til...)
Jeg vil imidlertid gerne have at i hvert tiende tilfælde, skal der ikke
vises et citat, men en opfordring om at indsende forslag til citater
(samtidig vil jeg gerne have vist hvor mange citater der er ialt i
databasen, men denne opfordring skal ikke tælles med!)

> HVIS det imidlertid ikke er tilfældet (eller hvis du insisterer på at
> gøre det du beder om hjælp til) er du efter min bedste overbevisning
> nødt til at lave et script som henter max(id) ud og undersøger om den
> slutter på 1. Jeg kan se nedenfor at du bruger php, så vil substr(-1)
> give dig sidste position i den variabel som du trækker id ud i.

Jeg insisterer absolut ikke på at gøre tingende mere kringlede end de
behøver at være!

> Igen: det lyder altså forkert det her, men
> SELECT COUNT(id) FROM tabel WHERE RIGHT(ID,1) !='1'

Igen, hvis det kan gøres anderledes/nemmere/smartere, vil jeg da gerne vide
hvordan...

/Michael.



Martin C. Petersen (15-07-2003)
Kommentar
Fra : Martin C. Petersen


Dato : 15-07-03 16:17

"Michael Alø-Nielsen" <m-alo@hotpop.com> skrev i en meddelelse
news:3f141262$0$24619>
> Tillad mig lige at forklare hvad jeg gerne vil opnå:
> Jeg vil på min hjemmeside gerne vise et tilfældigt musikcitat fra min
> database...
> (Hidtil har jeg gjort det via en almindelig tekstfil og et php-script, men
> tænkte at det måske ville være smartere med en database efterhånden som
der
> kommer flere og flere citater til...)
> Jeg vil imidlertid gerne have at i hvert tiende tilfælde, skal der ikke
> vises et citat, men en opfordring om at indsende forslag til citater
> (samtidig vil jeg gerne have vist hvor mange citater der er ialt i
> databasen, men denne opfordring skal ikke tælles med!)
if (mt_rand(0,10)<=1)
{
// vis opfordring
} else
{
// vis tilfældigt citat (SELECT * FROM musikcitater ORDER BY RAND() LIMIT 1)
}


Martin



Jesper Brunholm (15-07-2003)
Kommentar
Fra : Jesper Brunholm


Dato : 15-07-03 16:38

Michael Alø-Nielsen wrote:

> "Jesper Brunholm" <nospam@brunholm-scharff.dk> skrev i en meddelelse
> news:3F140D22.1000202@brunholm-scharff.dk...

> Jeg er ganske nybegynder udi databaser, og er desværre ikke lige helt med på
> hvad normalisering dækker over...

Du bør nok have fat i en relationsdatabasetutorial - der er en del af
dem rundt omkring på nettet - fx. også en på mysql.com.

Normalisering går bla. ud på at der ikke ligger to identiske rækker i en
tabel, det er spild af plads og gør det besværligt at opdatere.

> Aha... Ok, hvis det kan gøres smartere, vil jeg da meget gerne hvide
> hvordan?
>
> Tillad mig lige at forklare hvad jeg gerne vil opnå:

det var jo det jeg fiskede efter

> Jeg vil på min hjemmeside gerne vise et tilfældigt musikcitat fra min
> database...
> (Hidtil har jeg gjort det via en almindelig tekstfil og et php-script, men
> tænkte at det måske ville være smartere med en database efterhånden som der
> kommer flere og flere citater til...)
> Jeg vil imidlertid gerne have at i hvert tiende tilfælde, skal der ikke
> vises et citat, men en opfordring om at indsende forslag til citater
> (samtidig vil jeg gerne have vist hvor mange citater der er ialt i
> databasen, men denne opfordring skal ikke tælles med!)

Det skal du bruge en randomiser i dit script til. Jeg kan se du har fået
vejledning til den, så jeg vil undlade gentagelse.

mvh

Jesper Brunholm


--
Phønix - dansk folk-musik i front - <http://www.phonixfolk.dk/>
H.C. Andersen-Centret med nyt design: <http://www.andersen.sdu.dk/>


Michael Alø-Nielsen (15-07-2003)
Kommentar
Fra : Michael Alø-Nielsen


Dato : 15-07-03 20:09

"Jesper Brunholm" <nospam@brunholm-scharff.dk> skrev i en meddelelse
news:3F141FC7.3000207@brunholm-scharff.dk...
> Michael Alø-Nielsen wrote:

> Du bør nok have fat i en relationsdatabasetutorial - der er en del af
> dem rundt omkring på nettet - fx. også en på mysql.com.

Ok, det vil jeg kigge nærmere på...

> Normalisering går bla. ud på at der ikke ligger to identiske rækker i en
> tabel, det er spild af plads og gør det besværligt at opdatere.

Og det kan jeg da også sagtens se fornuften i...

> Det skal du bruge en randomiser i dit script til. Jeg kan se du har fået
> vejledning til den, så jeg vil undlade gentagelse.

Jeg har nu indset fornuften i at min opfordring ikke skal ligge i databasen,
men blot i scriptet!
Så kan jeg også nemmere konstruere de rette queries, når jeg ikke skal tage
højde for de mange (unødvendige) ens rækker i tabellen...

Ja, så var min løsning jo ikke så database-relateret alligevel, men godt at
i kunne bringe mig på rette spor!
Nu fungerer det som jeg gerne vil have det - 1000 tak! (Både til dig og
Martin!)

/Michael.



Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408522
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste