webForumDet fria alternativet

Recordset och arrayer

2 svar · 264 visningar · startad av nadabalunas

nadabalunasMedlem sedan okt. 200211 inlägg
#1

Försöker att på ett enkelt sätt att lagra ett RS i en array.
Denna array vill jag sedan göra åtkomlig på andra sidor för att slippa anropa databasen varje gång.

Databasen ser ut ungefär så här:
Tabell 'Kategorier':
katType, katNamn

Tabell 'typer':
adType, adTypename

sqlfrågan jag använder ser ut så här:
SELECT typer.adType,typer.adTypename,typer.katType, kategorier.katType,kategorier.katNamn
FROM typer
INNER JOIN kategorier
ON typer.katType = kategorier.katType
ORDER BY kategorier.katType,typer.adType

Resultatet vill jag loopa ut så att kategorierna bara visas en gång var.
T.ex: Inbundet | Paper back
Under dessa vill jag sedan loopa ut typerna.
T.ex:
Deckare

  • Deckare | Deckare
  • Romaner | Romaner
  • Övrigt | Pockets

Eftersom jag behöver anropa denna array på flera sidor tänkte jag skapa den en gång vid laddningen av sidan och lägga den i en array.
Sen varje gång jag ska använda arrayen så tänkte jag använda foreach($array as $var)

Problemet just nu är alltså att jag får dubletter av kategorierna.
Har testat detta:
[PHP] $bokarr[] = array
(
'annonstyp' => array
(
'adType' => $rs['adType'],
'adTypename' => $rs['adTypename'],
),
'annonskategori' => array
(
'katType' => $rs['katType'],
'katNamn' => $rs['katNamn'],
),
);

osv...

Har även testat:
[PHP]
$bokarr["kategori"][$rs["katType"]]=$rs["katNamn"];
$bokarrarr["typ"][$rs["adType"]]=$rs["adTypename"];

Med samma resultat...

Hoppas ni förstår och har möjlighet att hjälpa mig!

aasahMedlem sedan mars 20033 451 inlägg
#2

Re: Recordset och arrayer

Om du hade lagt dina koder inom [ KOD] (fast utan mellanslag mellan [ och K ) så hade det blivit betydligt lättare att läsa.

Jag antar att du har en kolumn katType i typer också? Annars har du fel i SQL-frågan. Om det är så att varje kategori (kan) ha flera adTypes men inte tvärtom, samt att varje adType har precis ett adTypename så kan du skriva:

SELECT T.adType, T.adTypename, T.katType, K.katNamn 
FROM typer T
INNER JOIN kategorier K
ON T.katType = K.katType 
ORDER BY K.katType, T.adType

Eftersom katType ska vara lika i de två tabellerna så behöver du ju inte plocka ut värdet från båda tabellerna, de innehåller ju samma info. Där har du (troligen) dina dubbletter.

nadabalunas skrev:

Försöker att på ett enkelt sätt att lagra ett RS i en array.
Denna array vill jag sedan göra åtkomlig på andra sidor för att slippa anropa databasen varje gång.

Jag är inte riktigt med på vad du menar... Ditt resultset ÄR ju en array! Alltså: (Tex om du har MySQL.)

$sql= "<din fåga>";
$res = mysql_query($sql) or die();
while ($row=mysql_fetch_array($res)) {
   //$row[index] innehåller den index:e kolumnen 
   //av det du tog fram med SELECT, start på index 0. 
}

Det finns funktioner för att flytta tillbaka pekaren till första raden för att kunns skriva ut igen om det behövs...

nadabalunasMedlem sedan okt. 200211 inlägg
#3

Ta bort joinen..

Ja visst har jag en katType i typer också.
Du menar alltså att frågan blir lika effektiv om jag slopar inner join'en?`

Ett resultat (som ju ligger i en array) från en fråga försvinner ju när man har använt arrayen.
I alla fall funkar det så i min version av php.
Därför ville jag lägga resultatet i en array för att enkelt kunna skriva ut t.ex rubriker på varje sida utan att anropa DB.

Genererad på 374 ms · cache AV · v20260730165559-full.f96bc7eb