Avatar billede truthorn Nybegynder
16. januar 2003 - 23:50 Der er 6 kommentarer

hardcore array + mysql

(hardcore: I hvert fald for mig....)

Jeg laver først en join-sætning, så jeg i ét sql-kald får alle de relevante informationer.....


I kaldet får jeg alle oplysninger på personen [personer], selve organisationerne [organisationer], samt tabellen, hvor jeg kan uddrage, hvor mange organisationer vedkommende person er medlem af [personer_organisationer].

Jeg får 2 resultater ud af forespørgslen, idet denne ENE person er medlem af 2 organisationer (bemærk WHERE-klausulen :)

Herefter laver jeg en while-løkke om mysql-statementen, hvor jeg danner et array


-------------------------


$res_personer = mysql_query("
SELECT *
FROM personer

LEFT JOIN personer_organisationer
ON personer.personerid=personer_organisationer.personer_personerid

LEFT JOIN organisationer
ON organisationer.organisationerid=personer_organisationer.organisationer_organisationerid

WHERE personer.personerid='$id'
AND personer.personerid=personer_organisationer.personer_personerid
");


$array_test = array();
while($obj = mysql_fetch_array($res_personer))
{
    $array_test[] = $obj;
}

-------------------------

Efterfølgende er jeg dog på herrens mark.....det jeg slutteligt skal bruge ting til er, at adskille de forskellige dele på en ordnetlig måde ud fra $array_test[] (der kommer nemlig flere joins på senere :-/).

Men hvis jeg eksempelvis ønsker at isolere organisationerne fra dette array, så jeg kan gøre noget selvstændig med disse - hvad gør jeg så ?

Jeg håber, at jeg har gjort mig forholdsvis forståelig - ellers kommenterer jeg gerne videre :)

Håber, at der er nogle, der kan hjælpe mig....
Avatar billede truthorn Nybegynder
17. januar 2003 - 00:04 #1
Mit problem er lidt (samtidig), at jeg med flere joins får flere resultater.....dvs. med 2 organisationer, så får jeg 2 resultater - hvis jeg joinede henover en ny "mange-mange" tabel, f.eks. hvilke byer befinder denne person sig i (og der eksempelvis er 3 byer), så får jeg 6 "resultatsæt" af min SQL-query (2*3 = 6).....jeg ved ikke, om dette er forkert, eller om man blot skal løse problematikken i array'et?
Avatar billede tipsen Nybegynder
17. januar 2003 - 00:45 #2
En sql-query giver anledning til ét resultatsæt med et bestemt antal poster/rækker!
Avatar billede tipsen Nybegynder
17. januar 2003 - 00:46 #3
Hvis du skal bruge flere forskellige informationer, hvorfor så ikke bare trække dem ud vha. sql når du alligevel har forbindelsen åben - tror ikke der er nævneværdig forskel på det og alle de array-operationer du kommer til at udføre på posterne fra det ene resultatsæt.
Avatar billede martinheick Nybegynder
17. januar 2003 - 09:46 #4
Hvis jeg har forstået det ret....

Så ville jeg vælge og droppe * i min select og så klar definere de data jeg trækker ud.
Da jeg ikke er så stærk i objekter, ville jeg benytte f.eks. "mysql_fetch_assoc" så mine data bliver gemt i et associativt array. Dernæst kan jeg udtage de data jeg ønsker ved at kalden dem i en løkke f.eks. med $array_test[$i]['organisationer'].
Avatar billede truthorn Nybegynder
21. januar 2003 - 15:35 #5
OK, jeg har faktisk aldrig brugt mysql_fetch_assoc - er der noget "kryptisk ved den?
Avatar billede martinheick Nybegynder
21. januar 2003 - 15:49 #6
næ, egentlig ikke. Du kan prøve at se noget af denne kode
-----------------
$query = "SELECT doc_name, doc_title FROM document WHERE doc_id='$doc_id'";
$result = dbquery($query);
$numresults = mysql_num_rows($result);
    if ($numresults!=1) {die ("could not get docname/doctitle from database");}
$data = mysql_fetch_assoc($result);
$filename = $data['doc_name'];
$filetitle = $data['doc_title'];
----------------
Med mysql_fetch_assoc får man et associativt array, hvor man bruger mysql navnet til at hente sin sin variable i arrayet.
Jeg synes, den er ok at bruge. Bruger også mysql_fetch_array, som giver nogenlunde det samme.
eks
----------------------
$result = dbquery($query); //-- henter data i db
$num_results = mysql_num_rows($result);
$k=0; //Bruges til indsætning i if sætning herunder
    for ($i=0; $i<$num_results; $i++) {
        $row = mysql_fetch_array($result);
        $row['titel'] = htmlspecialchars(stripslashes($row[titel]));       
        $row['description'] = htmlspecialchars(stripslashes($row[description]));               
        $row['link_id'] = stripslashes(($row[link_id]));
...
...
...
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