MySQL - Hvordan hente data fra to tabeller?

tyr897

Medlem
Du ønsker altså å gruppere etter brukerid også? Isåfall legger du det bare til group by.

Kode:
GROUP BY statusupdates.id, users.id
 

Mr Vest

Sjefen over alle sjefer!
Det ser ikke ut til at det blir noen forkjell der altså.... Her er en forklaring fra scratch om hva jeg faktisk vil få til:

Jeg har en database. I databasen har jeg følgende 2 tabeller:

Tabell1 - users
Rader - id, username, imageorvideo

Tabell2 - statusupdates
Rader - id, userid, statuscontent

(i disse to tabellene har USERNAME og USERID samme verdi.)

Hva vil jeg? - Hente ut er 20 rader fra USERS hvor feltet IMAGEORVIDEO er satt til VIDEO. Sammen med disse 20 feltene vil jeg hente ut tilhørende STATUSCONTENT fra STATUSUPDATES, dvs siste rad i STATUSUPDATES hvor USERID er det samme som USERNAME i USERS.

= For å fikse overstående kan jeg bruke spørringa jeg allerede har. Dvs, den som jeg la fra meg i forige innlegg. =

Videre vil jeg unngå at samme brukernavn kommer ut mer enn 1 antall ganger. USERID i STATUSUPDATES kan nemlig i denne databasen inneholde samme brukernavn i mange rader. Det er dette jeg ikke får til. Slik som det er nå, så henter den ut samme brukernavn 20 ganger - Hvor da STATUSCONTENT i STATUSUPDATES blir forkjellig for alle 20.

Dette er altså 110% akkurat det jeg vil hente ut med SELECT, men hvordan skal jeg gjøre det? Nå har jeg attpåtil forsøkt meg med selveste Bing som søkemotor uten noen gode svar på dette.
 

mkander

Medlem
SELECT * FROM statusupdates LEFT JOIN users ON statusupdates.userid = users.username WHERE users.imageorvideo = 'video' GROUP BY statusupdates.userid ORDER BY statusupdates.id DESC LIMIT 0,20
 

mkander

Medlem
Dette finner du mer om i Mysql manualen. Ellers finnes det masse bra bøker om programmering/mysql. Jeg leste f.eks. PHP Bible da jeg lærte meg PHP, den var kjempebra.
 

Mr Vest

Sjefen over alle sjefer!
Queryen din sørger for at navnet mitt ikke gjentar seg, BRA. - Men allikevel så henter den ut feil rad fra STATUSUPDATES.STATUSCONTENT. Den henter første rad den finner, og ikke den siste basert på ID slik som det står at den skal. Hva kan årsaken til det være?

Hmm. Den manualen kan jeg se for meg at er virkelig vanskelig å forstå for nybegynnern. Jeg skal se på litt bøker etterhvert tenker jeg. Kan jo også være greit og lese litt uten å sitte foran skjermen hele veien også.
 

mkander

Medlem
Hmm. Funnet ut av dette? Hvis du f.eks. kutter ut GROUP BY vil du få ut de nyeste. Hvis du har mange brukere på nettstedet vil det vel være liten sannsynlighet for å få ut flere entries fra samme bruker... Evnt. kan du ta ut f.eks. dobbelt så mange resultater som du trenger og hoppe over posten hvis brukeren allerede har vært i loopen. Da slipper du GROUP BY som nok vil være tungt for mysql hvis du har mange rader.

Når det gjelder mysql-løsninger blir det nok litt mer komplisert tror jeg. Mulige løsninger:
- Sub-queries
- Midlertidige tabeller

.. og sikkert noen flere muligheter.
 

Mr Vest

Sjefen over alle sjefer!
Nope, jeg har nok ikke funnet ut av det enda.

Jeg kan faktisk se for meg at det vil komme ganske mange rader i denne tabellen på forholdsvis kort tid, så dersom GROUP BY er tungt for databasen og jeg kan unngå den er jo det genialt.

Hmm, har du noen tips til hva jeg kan gjøre for å unngå at samme brukeren gjentar seg i loopen? Tidligere fant jeg nemlig ut at jeg kunne kjøre inn DISTICT i spørringen mot databassen for å unngå det, men det funker ikke når jeg bruker LEFT JOIN har jeg funnet ut.
 

mkander

Medlem
Det jeg tenkte var at du kan gjøre det i PHP-koden.

F.eks:

$user_ids = array();

while($row = mysql_fetch_array($result, MYSQL_NUM)) {
$user_id = $row[0];
if (!in_array($user_id, $user_ids)) {
// gjør noe
$user_ids[] = $user_id;
}
}

... med forbehold om skrivefeil :) Forutsetter at userid/brukernavn er spesifisert først i queryen.
 

Mr Vest

Sjefen over alle sjefer!
Ok, så det funker på den måten altså. Jeg var bare så sikker på at noe slikt ikke ville fungere ser du, fordi det er flere forkjellige brukernavn som gjerne kommer ut - Og at den ikke forstår det på en måte.

Jeg skal kikke litt på den der etterpå. Takk så mye. :)
 

Mr Vest

Sjefen over alle sjefer!
Dette fungerte kjempebra mkander. Takk så mye for god hjelp i tråden. Jeg må innrømme jeg satt og tulla meg litt fordi jeg trodde $row[0] skulle være $row[1] og $row[1] skulle være $row[2] osv, og at $row[0] ikke var noe som helst, men det ser ut til at alt ble bra her nå altså. Takk. :)
 

Mr Vest

Sjefen over alle sjefer!
En liten Alpha-versjon hvor jeg skal vise frem at jeg er dritdyktig i PHP kommer nok om ikke så altfor lenge. :D
 
Topp