---
title: "\"WHERE IN-problem\""
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/141613-where-in-problem"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "lillebror"
published: "2006-01-27T19:09:45.000Z"
updated: "2006-01-29T15:58:47.000Z"
replies: 22
views: 612
page: 1
pages: 2
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/databaser-sql/141613-where-in-problem"
---

# "WHERE IN-problem"

_Sida 1 av 2._

## #1 — lillebror, 2006-01-27T19:09Z

Jag får inte följande uttryck att fungera:

```
if($_SESSION["uid"] <> '') { 
	$inline = "(SELECT usergroupID FROM tblmemberusergroups WHERE memberID = ".$_SESSION["uid"].")"; 
	} else { 
	$inline = 1;
	}

	$sqlSelect = "SELECT title, forumID FROM tblforum AS t1 WHERE categoryID = $ID AND visible = 1 AND usergroupID IN ".$inline."";
```

Vad är galet?! Borde det inte fungera men "IN"?

Permalänk: https://www.webforum.nu/p/141613

## #2 — LarsG, 2006-01-27T19:42Z

Och vad menas med inte fungera?

Permalänk: https://www.webforum.nu/p/1754945

## #3 — lillebror, 2006-01-27T20:01Z

Beroende på om besökaren är inloggad eller inte plockar den första if-satsen ut alla de medlemsgrupper som en användare är med i (de styr vilka forum som visas). I SQL-satsen nedanför hämtas titel och forumID för forum som har visible = 1 och där categoryID = $ID samt slutligen där usergroup-fältet för ett visst forum matchar något/någon av de grupper som en medlem är medlem i. 

I nuläget misstänker jag att felet ligger i **usergroup ID ".$inline."";**. Jag är osäker på vilka värden som jag igentligen får med mig i den nästlade SQL-satsen.

Enligt den bifogade bilden så ska forumet "Utveckling och idéer" vara dolt i den select-lista som visas. Men i detta så är den fullt synligt. Hur felsöker jag?

Bilagor:

- [forum.jpg](https://www.webforum.nu/a/9454.jpg)

Permalänk: https://www.webforum.nu/p/1754957

## #4 — LarsG, 2006-01-27T20:09Z

Börja med att eka ut din fråga och testa den separat.

Permalänk: https://www.webforum.nu/p/1754961

## #5 — lillebror, 2006-01-27T20:16Z

Detta får jag ut i den nästlade satsen (bifogad bild)

Resultatet talar ju om vilka grupper som en medlem (jag i detta fallet) är med i. 1,2 och 3 innebär att jag kan ta del av samtliga forum. Felet verkar ju nu ligga i huvudsatsen. Jämför inte SQL-satsen usergroupID-fältet i tblforum med det resultat som kommer från tblmemberusergroups?

Bilagor:

- [usergroupID.jpg](https://www.webforum.nu/a/9455.jpg)

Permalänk: https://www.webforum.nu/p/1754962

## #6 — Peter S, 2006-01-27T20:38Z

Vad får du med 

```
echo $sqlSelect;
```

?

Red./ Sedan bör väl else-satsen se ut så här

```
else { 
	$inline = "(1)";
	}
```

Permalänk: https://www.webforum.nu/p/1754976

## #7 — lillebror, 2006-01-27T22:00Z

> **Peter S skrev:**
>
> Vad får du med 
>
>
> ```
> echo $sqlSelect;
> ```
>
> 
> ?

Se bifogad bild.

Bilagor:

- [usergroupID.jpg](https://www.webforum.nu/a/9457.jpg)

Permalänk: https://www.webforum.nu/p/1754997

## #8 — Peter S, 2006-01-27T22:09Z

Om du kör den direkt mot MySQL får du resultatet i inlägg #5?

Permalänk: https://www.webforum.nu/p/1755001

## #9 — lillebror, 2006-01-27T22:19Z

Hur menar du nu? :OO

Permalänk: https://www.webforum.nu/p/1755005

## #10 — Peter S, 2006-01-28T10:32Z

Eftersom Lars gav rådet att testa den separat trodde jag att du kanske gjort just det. Om så inte var fallet är det bara att sätta igång  :)

Permalänk: https://www.webforum.nu/p/1755104

## #11 — @nders, 2006-01-28T11:10Z

Parenteser är bra. 

```
.... IN (1,2,3)
```

Permalänk: https://www.webforum.nu/p/1755119

## #12 — lillebror, 2006-01-28T21:19Z

> **Peter S skrev:**
>
> inlägg #5?

Jag menade vad du syftade på när du sa "inlägg #5". Jag har ju en select-ruta där det slutgiltiga resultatet presenteras och där finns inget inlägg :)

Permalänk: https://www.webforum.nu/p/1755327

## #13 — @nders, 2006-01-29T09:57Z

Jag tror att [detta](http://www.webforum.nu/showthread.php?p=1150009#post1150009) är inlägg #5... :o

Permalänk: https://www.webforum.nu/p/1755485

## #14 — Peter S, 2006-01-29T11:02Z

> **@nders skrev:**
>
> Jag tror att [detta](http://www.webforum.nu/showthread.php?p=1150009#post1150009) är inlägg #5... :o

Ja, just det  (y)

Permalänk: https://www.webforum.nu/p/1755520

## #15 — lillebror, 2006-01-29T11:33Z

> **Peter S skrev:**
>
> Om du kör den direkt mot MySQL får du resultatet i inlägg #5?

Jag fick hjärnsläpp och fattade inte vad du syftade på   :e 

Svaret i inlägg # 5 fick jag när jag körde direkt mot MySQL-databasen.

Permalänk: https://www.webforum.nu/p/1755526

## #16 — lillebror, 2006-01-29T11:41Z

Så ser den dagsaktuella varianten av funktionen ut med "IN". Får det fortfarande inte att fungera:

```
function showShortcutForumList($ID) {

	if($_SESSION["uid"] <> '') { 
	$inline = "(SELECT usergroupID FROM tblmemberusergroups WHERE memberID = ".$_SESSION["uid"].")"; 
	} else { 
	$inline = 1;
	}

	$sqlSelect = "SELECT title, forumID FROM tblforum AS t1 WHERE categoryID = $ID AND visible = 1 AND usergroupID IN (".$inline.")";

	$RSobj = mysql_query($sqlSelect) or die (mysql_error());
	
	#$row = mysql_fetch_array($RSobj);	

	return $RSobj;
}
```

I den bifogade bilden syns nu enbart det forum som har ett usergroupID = 3. Alla de andra forumen har usergroupID = 1. Dessa världen verkar inte följa med från...

```
$inline = "(SELECT MAX(usergroupID) FROM tblmemberusergroups WHERE memberID = ".$_SESSION["uid"].")"; 
	} else { 
	$inline = 1;
}
```

Bilagor:

- [usergroupID.jpg](https://www.webforum.nu/a/9483.jpg)

Permalänk: https://www.webforum.nu/p/1755529

## #17 — Peter S, 2006-01-29T12:36Z

> **lillebror skrev:**
>
> I den bifogade bilden syns nu enbart det forum som har ett usergroupID = 3. Alla de andra forumen har usergroupID = 1. Dessa världen verkar inte följa med från...
> 
>
>
> ```
> $inline = "(SELECT MAX(usergroupID) FROM tblmemberusergroups WHERE memberID = ".$_SESSION["uid"].")"; 
> 	} else { 
> 	$inline = 1;
> }
> ```

Det är för att max() returnerar ett värde (3 i det här fallet).

Sedan borde det väl se ut så här:

```
function showShortcutForumList($ID) {

	if($_SESSION["uid"] <> '') { 
	$inline = [b]"SELECT usergroupID FROM tblmemberusergroups WHERE memberID = ".$_SESSION["uid"];[/b] 
	} else { 
	$inline = 1;
	}

	$sqlSelect = "SELECT title, forumID FROM tblforum AS t1 WHERE categoryID = $ID AND visible = 1 AND usergroupID IN (".$inline.")";

	$RSobj = mysql_query($sqlSelect) or die (mysql_error());
	
	#$row = mysql_fetch_array($RSobj);	

	return $RSobj;
}
```

Vad får du för resultat med

```
SELECT usergroupID FROM tblmemberusergroups WHERE memberID = ".$_SESSION["uid"];
```

?

Permalänk: https://www.webforum.nu/p/1755544

## #18 — lillebror, 2006-01-29T12:45Z

Jag missade att korrigera på den del jag hade kopierat och klistrat in i inlägget. MAX() är alltså borttaget i min nuvarande variant.

När jag kör sql-frågan utan MAX() får jag ut 1,2,3. Det är märkligt att jag sedan inte kan matcha det resultatet mot respektive usergroupID för varje forum  :OO

Permalänk: https://www.webforum.nu/p/1755549

## #19 — Peter S, 2006-01-29T12:53Z

Det kan inte vara

```
categoryID = $ID AND visible = 1
```

...som ställer till det? Vad får du t ex med 

```
"SELECT title, forumID FROM tblforum AS t1 WHERE usergroupID IN (SELECT usergroupID FROM tblmemberusergroups WHERE memberID = ".$_SESSION["uid"].")"
```

...respektive

```
"SELECT title, forumID FROM tblforum AS t1 WHERE visible = 1 AND usergroupID IN (SELECT usergroupID FROM tblmemberusergroups WHERE memberID = ".$_SESSION["uid"].")"
```

Permalänk: https://www.webforum.nu/p/1755554

## #20 — lillebror, 2006-01-29T13:12Z

> **Peter S skrev:**
>
> Det kan inte vara
>
>
> ```
> categoryID = $ID AND visible = 1
> ```

Undersöker saken nu...categoryID = $ID behöver jag för i en while-slinga i php-filen matar jag funktionen **function showShortcutForumList($ID)** med categoryID som varje forum tillhör. Den behöver jag nog ha kvar.

```
<SELECT class="select" name="forumshortcutID" size="1" onchange="f(this)">
<?php while($forumcategory = mysql_fetch_array($RSobj_forum_category)) {
$RSobj_shortcut = showShortcutForumList($forumcategory['categoryID']); ?>
```

> **Peter S skrev:**
>
> ```
> "SELECT title, forumID FROM tblforum AS t1 WHERE usergroupID IN (SELECT usergroupID FROM tblmemberusergroups WHERE memberID = ".$_SESSION["uid"].")"
> ```

När jag kört denna sql-sats med mitt användarID på sidan (jag tillhör både grupp 1,2,3) så får jag 18 träffar (dvs samtliga forum visas för mig) medan en "vanlig" användare med behörighet 1 endast får 17 träffar. Då verkar det stämma för det finns enbart 1 forum som kräver behörighet 3.

> **Peter S skrev:**
>
> ```
> "SELECT title, forumID FROM tblforum AS t1 WHERE visible = 1 AND usergroupID IN (SELECT usergroupID FROM tblmemberusergroups WHERE memberID = ".$_SESSION["uid"].")"
> ```

För mig som tillhör samtliga grupper får jag upp samtliga forum (17 st) där visible = 1. Ett forum har visible = 0. Då stämmer resultatet så här långt när jag fyller i sql-frågan med mitt användarID. Användare med enbart behörighet 1 får upp 16 st forum.

Den sista av de två föreslagna sql-satserna fungerade fint. Sedan provade jag att lägga till **categoryID = 1** för att få alla forum under den sektionen. Då fick jag error. CategoryID återfinns i tabellen tblforum. Det verkar vara här felet uppstår.

Permalänk: https://www.webforum.nu/p/1755557

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/141613-where-in-problem  
Nästa sida: https://www.webforum.nu/amne/databaser-sql/141613-where-in-problem/page2.md
