Avatar billede ra__mus Nybegynder
04. august 2003 - 23:22 Der er 31 kommentarer og
1 løsning

kald med where

Jeg har følgende kald til en database :

$sql = "SELECT * FROM indsaet_post WHERE id = '$row[id]'";

det der gør det problematisk, er at $row[id] kan indeholde flere værdier. Normalt har man kun en værdi stående efter WHERE.

Hvordan gør man det ???
Avatar billede schaefner Juniormester
04. august 2003 - 23:23 #1
tjaah, hvad kan $row[id] da indeholde?
Avatar billede ra__mus Nybegynder
04. august 2003 - 23:28 #2
den indeholder værdierne for id
Avatar billede erikjacobsen Ekspert
04. august 2003 - 23:32 #3
Hvordan kan det fx se ud ?
Avatar billede ra__mus Nybegynder
04. august 2003 - 23:36 #4
lad os nu tage et eks.
og sige at jeg vil søge WHERE id=$row[0]=20 og id=$row[1]=70, hvad skriver man så
Avatar billede peturkirke Novice
04. august 2003 - 23:39 #5
kan du bruge IN på en eller anden måde ?:

WHERE id IN ('1','2','3','4','5','6')
Avatar billede ra__mus Nybegynder
04. august 2003 - 23:40 #6
id bliver først kaldet fra en anden tabel :

$sql = "SELECT id FROM tilmi WHERE userid = '$userid'";
$query = mysql_query($sql) or die(mysql_error() . '<br>' . $sql);
while ($row = mysql_fetch_array($query)) {
  echo $row[id];
}

og der kan således være flere forekomster..

Bagefter vil jeg så finde de poster i en anden tabel der har de netop kaldte id værdier ..
Avatar billede erikjacobsen Ekspert
04. august 2003 - 23:54 #7
$sql = "SELECT id FROM tilmi WHERE userid = '$userid'";
$query = mysql_query($sql) or die(mysql_error() . '<br>' . $sql);
$list = array():
while ($row = mysql_fetch_array($query)) {
  $list[]=$row[id];
}

$sql = "select ..... where id in (". join(",",$list) .")"
...osv
Avatar billede ra__mus Nybegynder
04. august 2003 - 23:58 #8
prøver lige om jeg kan få det til at fungere
Avatar billede erikjacobsen Ekspert
04. august 2003 - 23:59 #9
....men reelt har du nok brug for en join

select * from indsaet_post,tilmi where tilmi.id=indsaet_post.id and tilmi.userid='$userid'
Avatar billede ra__mus Nybegynder
05. august 2003 - 00:07 #10
har nu skrevet følgende :
$sql = "SELECT id FROM tilmi WHERE userid = '$userid'";
$query = mysql_query($sql) or die(mysql_error() . '<br>' . $sql);
$list = array();
while ($row = mysql_fetch_array($query)) {
  $list[]=$row[id];
}

$sql = "select * FROM indsaet_post where id in (". join(",",$list) .")";

$query = mysql_query($sql) or die(mysql_error() . '<br>' . $sql);
$row = mysql_fetch_array($query);
while ($row = mysql_fetch_array($query)) {
  echo "$row[kategori]";
}
exit;

men den udskriver ikke noget ???
Avatar billede erikjacobsen Ekspert
05. august 2003 - 00:09 #11
Prøv at udskrive dine sqlsætninger og se hvad der står i dem.
Avatar billede ra__mus Nybegynder
05. august 2003 - 00:14 #12
har udskrevet

$sql = "select * FROM indsaet_post where id in (". join(",",$list) .")";

echo "$sql";

og den skriver 75 som er værdien af id
Avatar billede ra__mus Nybegynder
05. august 2003 - 00:16 #13
eller rettere, den skriver

select * FROM indsaet_post where id in (75)
Avatar billede ra__mus Nybegynder
05. august 2003 - 00:20 #14
og ved den første sql skriver den :

SELECT id FROM tilmi WHERE userid = 'michael'
Avatar billede erikjacobsen Ekspert
05. august 2003 - 00:20 #15
Er der så et sted hvor id=75 ?
Avatar billede ra__mus Nybegynder
05. august 2003 - 00:21 #16
så id og userid er rigtige nok..

men den skriver bare ikke posten fra indsaet_post ud ??
Avatar billede ra__mus Nybegynder
05. august 2003 - 00:21 #17
ja der er et sted hvor id =75
Avatar billede erikjacobsen Ekspert
05. august 2003 - 00:25 #18
Du springer jo også en række over, når du kigger i indsaet_post ;))
Avatar billede ra__mus Nybegynder
05. august 2003 - 00:26 #19
hvordan det ??
Avatar billede erikjacobsen Ekspert
05. august 2003 - 00:26 #20
$row = mysql_fetch_array($query);
Avatar billede ra__mus Nybegynder
05. august 2003 - 00:28 #21
er ikke lige helt med..
Avatar billede ra__mus Nybegynder
05. august 2003 - 00:30 #22
erik kan du ikke præcisere det ??
Avatar billede erikjacobsen Ekspert
05. august 2003 - 00:31 #23
Det kan ikke præciseres mere end det allerede er gjort.

Men overvej den join. Det er den rigtige måde at gøre det på.
Avatar billede ra__mus Nybegynder
05. august 2003 - 00:32 #24
forstår ikke hvad du mener med at jeg springer en række over
Avatar billede ra__mus Nybegynder
05. august 2003 - 00:42 #25
når jeg bruger den join skriver den :

Unknown table 'tilmi' in where clause

select * FROM indsaet_post where tilmi.id=indsaet_post.id and tilmi.userid='michael'
Avatar billede ra__mus Nybegynder
05. august 2003 - 00:43 #26
er du stået af erik ..
Avatar billede ra__mus Nybegynder
05. august 2003 - 00:51 #27
kunne du ikke have sagt at jeg bare skulle slette

$row = mysql_fetch_array($query);

:)
Avatar billede ra__mus Nybegynder
05. august 2003 - 01:00 #28
læg et svar erik og du får pointsne.
det er også fint at man ikke får det hele serveret :)
Avatar billede erikjacobsen Ekspert
05. august 2003 - 08:23 #29
Nu skal du skrive join-sætningen som jeg skriver den.
Jeg behøver ikke points.
Avatar billede ra__mus Nybegynder
05. august 2003 - 10:08 #30
det virker som det er nu, så vel ikke nødvendigt med en join ?
Avatar billede erikjacobsen Ekspert
05. august 2003 - 10:18 #31
Som udgangspunkt er det bedst at lade databasen gøre arbejdet, og det gør den
med en join.
Avatar billede ra__mus Nybegynder
22. december 2004 - 10:26 #32
okay
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