Avatar billede grippen Nybegynder
11. august 2009 - 15:23 Der er 19 kommentarer

Mysql_query af array indhold

Hey Eksperter.

Da jeg ikke er så god til mysql querys udover de sædvanlige insert,update,select osv ville jeg spørge jer om hjælp.

Hvis jeg har en tabel der hedder 'login'. I den er alle mine brugere. De har så et felt der hedder 'site_id' hvor indholdet står sådan her: 1,2,3  (f.eks) Hvert tal repræsentere en side.

Så har jeg en anden tabel der hedder 'sites'. I den har jeg et felt der hedder 'site_id' som indeholder en sides id og 'site_url' som indeholder hjemmeside linket.


Så opstillet:

Tabel: login
site_id: 1,2,3 f.eks

Tabel: sites
site_id: 1  www.eksperten.dk
site_id: 2  www.eb.dk
site_id: 3  www.bt.dk


Mit spørgsmål går på. Hvordan får jeg samlet forespørgslen til 1 query hvis muligt, så den går ned i 'login' og henter brugerens site_id's op, og exploder() dem fra hinanden og så henter dem i 'sites' og udskriver dem?

Hvis i ikke forstår ovenstående så endelig skriv :)
Avatar billede repox Seniormester
11. august 2009 - 15:31 #1
Udover at det bliver en vildt kompliceret SQL streng du vil få stykket sammen, for at opnå det i en SQL sætning, hvad er der så i vejen med at gøre det på den simple måde?
Avatar billede grippen Nybegynder
11. august 2009 - 15:34 #2
Men hvis brugeren har 60 links f.eks, og jeg skulle mysql_query() for dem alle, ville det så ikke skabe en del trafik/load ?
Avatar billede eXcluzive Nybegynder
11. august 2009 - 15:34 #3
hvordan tjekke du hvilken bruge er logget ind?

SELECT * FROM sites, login WHERE sites.site_id=$site_id
hvor $site_id er brugerens site_id fra login tabel.
Avatar billede eXcluzive Nybegynder
11. august 2009 - 15:37 #4
SELECT sites.*, login.* FROM sites, login WHERE sites.site_id=$site_id

sorry sådan der.
Avatar billede repox Seniormester
11. august 2009 - 15:37 #5
Jo, det ville det da.

I virkeligheden ville det være bedre at lave din link tabel relaterende.

sites
[code]
+--------+--------+------------------+
| siteId | userId | url              |
+--------+--------+------------------+
|      1 |      1 | http://exp.dk    |
|      2 |      1 | http://eb.dk    |
|      3 |      2 | http://bt.dk    |
|      4 |      3 | http://pil.dk    |
+--------+--------+------------------+
[/code]

Så kan du med en enkelt forespørgsel hente de links ud som userId = 1 er tilknyttet til.
Avatar billede grippen Nybegynder
11. august 2009 - 15:38 #6
tjekker med sessions :) WHERE `user_id` = '$minsession' AND `username` = '$minsession'
Avatar billede grippen Nybegynder
11. august 2009 - 15:39 #7
@repox

Problemet ligger i at nogle af linksne deles af over 50 brugere. Derfor tænkte jeg det var bedst at samle links ID i brugerens tabel, altså 1,2,3 osv
Avatar billede grippen Nybegynder
11. august 2009 - 15:43 #8
Min løsning som den har været indtil nu var at lave en php fil med linksne og site_id og så inkludere den på siden.

Først henter jeg site_id fra login og så exploder dem og laver et for() og så henter linksne fra php filen. Men ville gerne samle det hele databasen så jeg er fri at skulle uploade php filen hver gang en side tilføjes.
Avatar billede repox Seniormester
11. august 2009 - 15:45 #9
Så skal du lave en tabel mere istedet for.

F.eks
[code]
+--------+--------+
| userId | siteId |
+--------+--------+
|      1 |      1 |
|      1 |      4 |
|      2 |      1 |
|      3 |      1 |
+--------+--------+
[/code]

Så bevarer du den struktur du er startet med.
Avatar billede eXcluzive Nybegynder
11. august 2009 - 15:47 #10
hvad med sådan en løsning?
SELECT
sites.*, login.*
FROM
sites, login
WHERE
sites.site_id=login.site_id
AND
login.user_id='$useridsession'
Avatar billede repox Seniormester
11. august 2009 - 15:51 #11
#10

Jeg tror ikke helt du har forstået problemstillingen. Læs #0 igen.
Avatar billede grippen Nybegynder
11. august 2009 - 15:54 #12
@repox

Jeg vil lige prøve din løsning med en ekstra tabel, og så vender jeg tilbage :)
Avatar billede grippen Nybegynder
11. august 2009 - 16:17 #13
WauW!

Tror faktisk jeg klarede det.
Lavede den tabel du forslog repox,

kaldte den 'sitesid'

id (auto increament)
user_id
site_id

Query'en der umiddelbart virker fint, kan den optimeres eller er den 'spot on' :) ?

mysql_query("SELECT sitesid.*, sites.* FROM sitesid, sites WHERE sitesid.site_id = sites.site_id AND sitesid.user_id = '$_SESSION[user_id]'");
Avatar billede grippen Nybegynder
11. august 2009 - 16:41 #14
Men mange tak for hjælpen til jer begge, eXcluzive for hjælp med query'en og Repox for hjælp med opstillingen af databasen, så hvis i begge gider at smide et svar :) ?
Avatar billede grippen Nybegynder
15. august 2009 - 17:01 #15
Ville i smide et svar, eller skal jeg selv lukke ?
Avatar billede eXcluzive Nybegynder
16. august 2009 - 21:51 #16
her  ;)
Avatar billede sw_red_6 Nybegynder
17. august 2009 - 16:09 #17
mht din sql så ville det her måske være lidt bedre..

mysql_query("SELECT sites.url FROM sites INNER JOIN sitesid ON site.id = sitesid.siteid WHERE sitesid.userid='$_SESSION[user_id]';");

og hvis du skal bruge mere end url så hent det også, men lad være med at hente alt fra begge tabellerne
Avatar billede grippen Nybegynder
17. august 2009 - 17:21 #18
hey sw_red.

Jeg prøvede lige din query, den skulle lige ændres så jeg ikke fik warnings. Denne query ser ud til at virke:

$sql2 = mysql_query("SELECT sites.site_name, sites.site_id FROM sites INNER JOIN sitesid ON sites.site_id = sitesid.id WHERE sitesid.user_id = '$_SESSION[user_id]'");

Men dvs denne query er mere optimerende end den gamle? (kender nemlig ikke til INNER JOIN metoden)

@eXclusive
Jeg gir lige repox en change til at svare, og sw_red_6 :)
Avatar billede sw_red_6 Nybegynder
19. august 2009 - 12:19 #19
ved ikke helt om inner join gør det mere optimeret, men det virker logisk for mig at man ikke henter alle felter hvis man kun skal bruge 2..

tænkt eksempel:
2x tabeller.
En med 10 felter
En med 20 felter
Du skal bruge 2 felter fra den ene og 7 felter fra den anden.

hvorfor hente alle 30 felter når du kan nøjes med at hente de 9 du faktisk skal bruge..?

hvis du ikke kender inner join kunne det måske være en ide at tjekke mysqls dokumentation angående joins - http://dev.mysql.com/doc/refman/5.0/en/join.html
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



IT-JOB

Cognizant Technology Solutions Denmark ApS

Senior Delivery Manager

Udviklings- og Forenklingsstyrelsen

Erfarne IT-udviklere til fremtidens skattevæsen

Magasin

IT-projektleder

Dansk Sygeplejeråd

IT-teknisk medarbejder