10. februar 2008 - 19:24Der er
19 kommentarer og 2 løsninger
Find seneste aktivitet over flere tabeller.
Jeg vil gerne finde de 10 seneste punkter fra 2 forskellige databaser.
Jeg har en database der hedder bids, og en der hedder notices.
I hver database er der en række der hedder ID og NAVN og en række der hedder TIMESTAMP som indeholder et standard timestamp for hver post i tabellen.
Hvordan henter jeg flettet den seneste aktivitet ud fra de timestamps?
Eks.: 1) En bruger opretter en tabel i notices med ID = 1 og NAVN = "Nr. 1". 2) Derefter opretter brugeren en tabel i BIDS med ID = '1' og NAVN = "Bud 1". 3)Derefter opretter brugeren en tabel i notices med ID = '5' og NAVN = "Nr. 25"
Dvs. at scriptet skal liste sådan: 1) Nr. 25 2) Bud 1 3) Nr. 1 osv osv.
Det skal ikke være sådan at den først henter f.eks. de sidste 5 fra notices og sidste 5 fra bids.. Den skal nærmest "flette" dem efter hvornår de blev lavet.
Hvordan gøres det?? Har prøvet med mysql_query("SELECT bids.*, notices.* FROM bids, notices WHERE bids.userid = '$_SESSION[userid]' AND notices.userid = '$_SESSION[userid]' ORDER BY timestamp"); men det resulterer ingen poster.
I dette særtema om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for menneskelig kontrol.
SELECT * FROM ( SELECT navn, timestamp FROM bids WHERE userid = '$_SESSION[userid]' ORDER BY timestamp DESC LIMIT 10 UNION SELECT navn, timestamp FROM notices userid = '$_SESSION[userid]' ORDER BY timestamp DESC LIMIT 10 ) ORDER BY timestamp DESC LIMIT 10
nielle: Giver denne løsning ikke det samme som din løsning:
SELECT * FROM `tbl_818877_a` WHERE userid = '$_SESSION['userid']' UNION SELECT * FROM `tbl_818877_b` WHERE userid = '$_SESSION['userid']' ORDER BY datotid LIMIT 10
Så skal du rette *'erne til de få data du vil have trukket ud. Og det du trækker ud og til sidst joiner, skal være de samme felter. Som f.eks. ID, navn og timestamp
Felterne i de to SELECTS i UNION'en skal hedde det samme og være af samme datatype. Hvis navnene er forskellige kan du bruge AS til at ændre deres navn.
Får følgende fejl: "Incorrect usage of UNION and ORDER BY";
I denne kode: $getLatestAct = mysql_query(" SELECT id, timestamp FROM ( SELECT id, timestamp FROM bids WHERE userid = '$_SESSION[userid]' ORDER BY timestamp DESC LIMIT 10 UNION SELECT id, timestamp FROM notices userid = '$_SESSION[userid]' ORDER BY timestamp DESC LIMIT 10 ) ORDER BY timestamp DESC LIMIT 10 ")or die(mysql_error());
Min kode: $getLatestAct = mysql_query(" SELECT id, timestamp FROM ( SELECT id, timestamp FROM bids WHERE userid = '$_SESSION[userid]' ORDER BY timestamp DESC LIMIT 10 UNION SELECT id, timestamp FROM notices WHERE userid = '$_SESSION[userid]' ORDER BY timestamp DESC LIMIT 10 ) ORDER BY timestamp DESC LIMIT 10 ")or die(mysql_error());
Den så således ud: mysql_query(" SELECT id, timestamp, latestActId FROM bids WHERE userid = '$_SESSION[userid]' UNION ALL SELECT id, timestamp, latestActId FROM notices WHERE userid = '$_SESSION[userid]' ORDER BY timestamp DESC LIMIT 10 ")or die(mysql_error());
Det burde ikke være nødvendig med 'ALL' ... det var nok de der LIMIT den brokkede sig over. Jeg havde inkluderet dem i et forsøg på at forbedre performance; Ingen grund til at lave en UNION på alt hvis man alligevel kun skulle have de 10 første rækker. Men hvis MySQL ikke acceptere den så er det jo lige meget. :^)
Synes godt om
Ny brugerNybegynder
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.