Gå til innhold

[Løst] Problem med MySql Query


Anbefalte innlegg

Videoannonse
Annonse

Hvis vi tar det herfra, så har jeg gjort det om slikt:

$userQuery = '';

foreach($friends as $a){
if(empty($userQuery)){
$userQuery.= "(post_bruker='$a' AND bruker='$a')";
}
else{
$userQuery.=" OR (post_bruker='$a' AND bruker='$a')";
}
}

$select_post = mysql_query("SELECT * FROM poster WHERE $userQuery ORDER BY id DESC") or die(mysql_error());
while($show_feed = mysql_fetch_assoc($select_post)){
// ouputen her
// Hvis du må hente brukerinfo, lag spørringen innenfor denne while loopen
}

Hvis du ser ekstra nøye har jeg lagt til "or die(mysql_error());" på spørringen din. Så siden du får den feilmeldingen din kan det hende at det er noe feil med spørringen som vi får vite ved or die mysql error.

 

Legg merke til at jeg også har brukt assoc istedenfor array. Assoc syns jeg er rimelig å bruke framfor array fordi at med array får man ut slik som dette: $array[0] = 1 $array['id'] = 1 $array[1] = Heisann alle sammen $array['melding'] = Heisann alle sammen

osv osv.

Men ved assoc får man bare ut id melding osv og ikke muligheten til å bruke tallene.

 

Molty

  • Liker 1
Lenke til kommentar

For hvis variabelen ikke er tom starter den med OR, og da blir selve spørringen feil :)

for den første som legges inn er bare vanlig uten noe and og or elle rnoe, men de neste som legges inn må være OR for å hente ut informasjonen

 

Molty

Lenke til kommentar

Når jeg ser nærmere på Moltys løsning, får jeg inntrykk av at vi har tolket problemstillingen på omtrent samme måte, og egentlig har kommet frem til prinsipielt den samme løsningen. Eneste forskjellen ser ut til å være at vi velger forskjellig strategi for å fortelle databasen hvilke data vi vil ha ut.

 

Ytelsesmessig tror jeg mitt forslag vil skalere noe bedre når antallet venner øker, da Moltys spørring fort kan vokse seg ganske lang, mens min spørring vil være den samme uansett antall venner som abonneres på. :)

  • Liker 1
Lenke til kommentar

Når jeg ser nærmere på Moltys løsning, får jeg inntrykk av at vi har tolket problemstillingen på omtrent samme måte, og egentlig har kommet frem til prinsipielt den samme løsningen. Eneste forskjellen ser ut til å være at vi velger forskjellig strategi for å fortelle databasen hvilke data vi vil ha ut.

 

Ytelsesmessig tror jeg mitt forslag vil skalere noe bedre når antallet venner øker, da Moltys spørring fort kan vokse seg ganske lang, mens min spørring vil være den samme uansett antall venner som abonneres på. :)

Tolket det slik at han ønsket det, hehe.

 

Men jeg kan jo berre legge til en LIMIT? Da får jeg kun f.eks. 15 på siden? :)
Det er det bare å gjøre vet du :) Og hvis du ikke husker eller vet hvordan så er det å skrive ORDER BY id DESC LIMIT 15

Du kan også lage sidetall ved å hente fra side 2 slik f.eks: ORDER BY id DESC LIMIT 15, 15 (hvis jeg husker riktig, hehe :D)

 

Molty

Lenke til kommentar

Jeg regnet med fra starten at det var meningen man skulle inn med en LIMIT-klausul på slutten ja - ellers ville spørringen returnert alle poster fra alle abonnerte venner. Over tid kan det fort bli forferdelig mye data.

 

Men det jeg nevnte om skalering har ikke med det å gjøre - jeg snakket om spørringen som sendes inn til databasen, ikke datasettet som kommer tilbake. Moltys løsning vil gi en spørring som ser omtrent slik ut hvis du abonnerer på poster fra to venner:

SELECT * FROM poster WHERE 
(post_bruker='2' AND bruker='1') OR 
(post_bruker='3' AND bruker='1') 
ORDER BY id DESC

Abonnerer du på poster fra 20 venner, blir det noe sånt som dette:

SELECT * FROM poster WHERE 
(post_bruker='2' AND bruker='1') OR 
(post_bruker='3' AND bruker='1') OR 
(post_bruker='4' AND bruker='1') OR 
(post_bruker='5' AND bruker='1') OR 
(post_bruker='6' AND bruker='1') OR 
(post_bruker='7' AND bruker='1') OR 
(post_bruker='8' AND bruker='1') OR 
(post_bruker='9' AND bruker='1') OR 
(post_bruker='10' AND bruker='1') OR 
(post_bruker='11' AND bruker='1') OR 
(post_bruker='12' AND bruker='1') OR 
(post_bruker='13' AND bruker='1') OR 
(post_bruker='14' AND bruker='1') OR 
(post_bruker='15' AND bruker='1') OR 
(post_bruker='16' AND bruker='1') OR 
(post_bruker='17' AND bruker='1') OR 
(post_bruker='18' AND bruker='1') OR 
(post_bruker='19' AND bruker='1') OR 
(post_bruker='20' AND bruker='1') OR 
(post_bruker='21' AND bruker='1') 
ORDER BY id DESC 

Abonnerer du på 200 venner, blir det... ja, det kan du jo selv tenke deg.

 

Med min løsning blir spørringen som sagt den samme uansett antall. :)

Lenke til kommentar

Jeg regnet med fra starten at det var meningen man skulle inn med en LIMIT-klausul på slutten ja - ellers ville spørringen returnert alle poster fra alle abonnerte venner. Over tid kan det fort bli forferdelig mye data.

 

Men det jeg nevnte om skalering har ikke med det å gjøre - jeg snakket om spørringen som sendes inn til databasen, ikke datasettet som kommer tilbake. Moltys løsning vil gi en spørring som ser omtrent slik ut hvis du abonnerer på poster fra to venner:

SELECT * FROM poster WHERE 
(post_bruker='2' AND bruker='1') OR 
(post_bruker='3' AND bruker='1') 
ORDER BY id DESC

Abonnerer du på poster fra 20 venner, blir det noe sånt som dette:

SELECT * FROM poster WHERE 
(post_bruker='2' AND bruker='1') OR 
(post_bruker='3' AND bruker='1') OR 
(post_bruker='4' AND bruker='1') OR 
(post_bruker='5' AND bruker='1') OR 
(post_bruker='6' AND bruker='1') OR 
(post_bruker='7' AND bruker='1') OR 
(post_bruker='8' AND bruker='1') OR 
(post_bruker='9' AND bruker='1') OR 
(post_bruker='10' AND bruker='1') OR 
(post_bruker='11' AND bruker='1') OR 
(post_bruker='12' AND bruker='1') OR 
(post_bruker='13' AND bruker='1') OR 
(post_bruker='14' AND bruker='1') OR 
(post_bruker='15' AND bruker='1') OR 
(post_bruker='16' AND bruker='1') OR 
(post_bruker='17' AND bruker='1') OR 
(post_bruker='18' AND bruker='1') OR 
(post_bruker='19' AND bruker='1') OR 
(post_bruker='20' AND bruker='1') OR 
(post_bruker='21' AND bruker='1') 
ORDER BY id DESC 

Abonnerer du på 200 venner, blir det... ja, det kan du jo selv tenke deg.

 

Med min løsning blir spørringen som sagt den samme uansett antall. :)

Det blir forresten likt på post_bruker og bruker, de skal være helt like (etter det vevo har skrevet i sin kode. Eneste forskjellen er vel kvaliteten eller ytelsen på spørringene. Hvilke som krever minst resurser og best optimalisert.

 

Men forstod ikke helt om du mente at min ville hente ut mange flere jo flere man abonnerte på, men det gjør den altså ikke hvis du mente det. (Bare for å si få det klarert ^^)

 

Molty

Lenke til kommentar

Hmm, jeg fikk i hvertfall den metoden molty til å fungere kjempeflott! Det vel ikke gjøre så mye om jeg har 345 abonnenter liksom? Eller om noen har 14023 ? Tar det så lang tid da? :!:

Har ikke erfart med så mye så det kan jeg ikke svare på. Men hvis det tar lang tid så vil jeg enten prøve å finne en bedre og mer optimalisert løsning enn det jeg har eller bedre server :D

 

Molty

Lenke til kommentar

Det blir forresten likt på post_bruker og bruker, de skal være helt like (etter det vevo har skrevet i sin kode.

Ja ok, du har nok rett i det - men det gjør ingen forskjell for det poenget jeg forsøker å få frem. :)

 

Men forstod ikke helt om du mente at min ville hente ut mange flere jo flere man abonnerte på, men det gjør den altså ikke hvis du mente det. (Bare for å si få det klarert ^^)

Nei, det var ikke det jeg mente, og det var derfor jeg i en tidligere post presiserte at jeg snakket om selve spørringen som sendes inn til databasen, og IKKE resultatsettet som kommer tilbake derfra. Antallet poster som returneres, styrer man jo med en LIMIT-klausul uansett om man velger din eller min måte å bygge opp spørringen på.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...