Avatar billede webber89 Nybegynder
15. januar 2007 - 20:47 Der er 20 kommentarer og
1 løsning

while eller if eller?

jeg har en tabel i en mysql database der ser således ud:

id  noget
1  a
2  a
3  a
4  b
5  b
6  c

jeg skal have udtaget 3 tal(id) hvor (noget) ikke må være ens.
til at udvælge (id) bruger jeg rand().
Men hvordan laver sådan den ikke tager 3 tal(id) hvor (noget) er det samme. eller to tal(id) hvor (noget) er ens?
Avatar billede thesurfer Nybegynder
15. januar 2007 - 21:16 #1
Avatar billede webber89 Nybegynder
15. januar 2007 - 21:21 #2
det forstår jeg ikke helt er ret ny til php
Avatar billede webber89 Nybegynder
15. januar 2007 - 21:22 #3
kan du ikke hjælpe mig lidt med noget kode
Avatar billede thesurfer Nybegynder
15. januar 2007 - 21:22 #4
SQL er ikke PHP..

Hvordan ser din SQL streng ud?

Det kan godt være, at jeg smutter i seng om lidt.. så kigger jeg på det i morgen, hvis der ikke er andre der har svaret..
Avatar billede webber89 Nybegynder
15. januar 2007 - 21:24 #5
$tal1 = rand(0,$poster);
echo "<br>";
echo $tal1;
echo "<br>";
$foresp1 = mysql_query("SELECT id, noget FROM tabel WHERE id = $tal1 ORDER BY `id` DESC ");
  while($data1 = mysql_fetch_array($foresp1)){
  echo $data1["noget"];
  echo "<br>";
  }
Avatar billede thesurfer Nybegynder
15. januar 2007 - 21:27 #6
Prøv med: SELECT id, distinct noget FROM tabel WHERE id = $tal1 ORDER BY `id` DESC

Men du skal nok have en begræsning på..

Enten TOP 3 eller Limit 3.. Jeg kan aldrig huske, hvad der er MS Access og hvad der er MySQL..
Avatar billede thesurfer Nybegynder
15. januar 2007 - 21:30 #7
Jeg tror at det er TOP..

Når du har prøvet SQL strengen i indlægget 15/01-2007 21:27:56, prøv med:

http://authors.aspalliance.com/stevesmith/articles/sprowcount.asp

Dvs: SELECT TOP 3 id, distinct noget FROM tabel WHERE id = $tal1 ORDER BY `id` DESC
Avatar billede thesurfer Nybegynder
15. januar 2007 - 21:31 #8
Jeg smutter i seng nu, og kigger ind i morgen igen..
Avatar billede thesurfer Nybegynder
15. januar 2007 - 21:34 #9
PS:

Det kan godt være, at det skal være:

SELECT id, distinct noget FROM tabel WHERE id = $tal1 ORDER BY `id` DESC limit 3

Eller:

SELECT id, distinct noget FROM tabel WHERE id = $tal1 ORDER BY `id` DESC limit 0,3

Se evt: http://www.plus2net.com/sql_tutorial/sql_limit.php


NU smutter jeg i seng.. :-)
Godnat og sov godt.
Avatar billede webber89 Nybegynder
15. januar 2007 - 21:40 #10
det skulle vel gerne være SELECT id, distinct noget FROM tabel WHERE id = $tal1 ORDER BY `id` DESC limit 3
men så skriver den fejl her $foresp2 = mysql_query("SELECT id, distinct noget FROM tabel WHERE id = $tal1 ORDER BY `id` DESC limit 3 ");
  while($data2 = mysql_fetch_array($foresp2)){ // det er i denne linje der er fejl
Avatar billede showsource Seniormester
16. januar 2007 - 14:15 #11
Hvad med

"SELECT `id`, `noget` FROM `tabel` GROUP BY `noget` ORDER BY RAND() LIMIT 1, 3"
Avatar billede webber89 Nybegynder
16. januar 2007 - 17:08 #12
showsource hvis jeg nu har følgene:

id noget
1  1
2  1
3  1
4  2
5  2
6  3

først køre jeg rand(1,6) den retunere så 4 hvor jeg så laver en forespørgsel hvor jeg så skriver nr. 1 blev 2
nu vil jeg gerne finde anden pladsen så der skal den lave en rand med tallende 1,2,3,6 hvordan for jeg den til det
Avatar billede showsource Seniormester
16. januar 2007 - 17:35 #13
ehh, jeg er nu ikke helt med på hvad du vil?

Du skal ha' tre records, right?
id er "unique" og vil derfor altid være forskellig.
Men noget kan godt være det samme i flere rows.

Men du skriver om "først en record" og derefter en mere..... ?????
Avatar billede showsource Seniormester
16. januar 2007 - 17:36 #14
Altså, vil du lave tre forespørgelser?
Avatar billede showsource Seniormester
16. januar 2007 - 17:38 #15
Eller med dit ex. på noget, tre tilfældige id'er, men med forskelligt noget?
Avatar billede webber89 Nybegynder
16. januar 2007 - 17:49 #16
ja tre foespørgelser
Avatar billede showsource Seniormester
16. januar 2007 - 17:54 #17
Hvorfor tre?
Avatar billede webber89 Nybegynder
16. januar 2007 - 18:13 #18
jeg ved ikke helt hva du menner jeg skal bare have lavet det som jeg beskriver derofr spørger jeg her jeg ved det ikke selv.

hvorstår du hvad jeg skriver i mit indlæg kl 17:08:13
Avatar billede showsource Seniormester
16. januar 2007 - 18:32 #19
Jow, tror nok jeg forstår hvad du skriver, men hvorfor lave tre query's i stedet for en enkelt?
Avatar billede thesurfer Nybegynder
17. januar 2007 - 00:15 #20
Jeg har lige læst spørgsmål og nogle indlæg igen..

Det ser ud til, at du skal bruge 3 forespørgsler, da du vil bruge rand..

Hvis det absolut SKAL være forskellige id'er, skal den "huske" hvilke den allerede har fundet..

Det betyder, at du skal gemme værdierne i en variabel eller en array..
Hver gang den har fundet en værdi, skal den kigge i variablen/arrayen, for at se om det allerede er valgt..

Hvis det ikke er valgt endnu, tilføjes det til variablen/værdi.. ellers skal den udføre forespørgslen igen..

Noget i stil med:

v = ""; // huske-variablen
tæller = 0; // antallet af fundne værdier, der ikke er gentagne værdier
while(tæller < 3)
{

  id = select ...
  hvis v.IkkeIndeholder(id + ",") så
    v = v + id + ","
    tæller = tæller + 1
  slut hvis
  }

}
Avatar billede webber89 Nybegynder
20. februar 2007 - 22:35 #21
takker
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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