15. marts 2011 - 18:04Der er
12 kommentarer og 1 løsning
Hent fra to tabeller
Hej...
Jeg henter lige nu info fra to databaser på følgende måde:
$blog = mysql_query("SELECT object_id from ideaal_term_relationships WHERE term_taxonomy_id='3' order by object_id DESC LIMIT 0,3"); while($blog_row = mysql_fetch_array($blog)) { $blog_id=$blog_row['object_id'];
echo $blog_id;
$blog_post = mysql_query("SELECT post_date,post_title,post_excerpt from ideaal_posts WHERE ID='$blog_id' and post_status='publish'");
Nu har jeg så indset at det giver problemer... Den kan fint hente de 3 første object_id fra ideaal_term_relationships, men hvis disse 3 ID ikke har post_status='publish', kommer der ikke noget ud... Derfor skal jeg finde en måde hvorpå den både tjekker at term_taxonomy_id='3' og at post_status='publish'...
Håber nogen kan løse det lille problem for mig.. :)
Undskyld, jeg kom til at trykke paa opret knappen foer jeg var faerdig. Her er queryen: SELECT post_date, post_title, post_excerpt FROM ideaal_term_relationships JOIN ideaal_posts ON ideaal_term_relationships.object_id = ideaal_post.ID WHERE term_taxonomy_id = '3' AND post_status = 'publish'
Der kan vaere flere aarsager til at du ikke faar noget resultat.
(1) Maaske har jeg misforstaaet din tabelstruktur. Jeg regnede ud fra dit spoergsmaal at du har (mindst) to tabeller med disse navne og (mindst) disse felter:
og at ideaal_posts.ID indeholder de samme vaerdier som ideaal_term_relationships.object_id.
Er det korrekt, eller er din tabelstruktur anderledes? I saa fald forklar.
(2) Hvis ja til (1) (at din tabelstruktur er som skrevet), saa kan der vaere en eller anden syntaks fejl. Maaske er et af felterne stavet anderledes i tabellerne. Det kan du fange ved at inkludere mysql_error, saaledes:
$test = mysql_query("SELECT post_date, post_title, post_excerpt FROM ideaal_term_relationships JOIN ideaal_posts ON ideaal_term_relationships.object_id = ideaal_post.ID WHERE term_taxonomy_id = '3' AND post_status = 'publish'") or die (mysql_error());
Saa vil du faa en fejlmelding hvis der er syntaks fejl.
(3) Hvis der heller ikke er syntaksfejl, saa tyder det paa at der ikke er nogen kombination af vaerdier i de to tabeller hvor taxonomi er 3 og post_status er publish. Du kunne proeve foerst at udskrive alle object_id'er hvor taxonomi er 3 og derefter udskrive alle ID'er hvor post_status = 'publish' og saa manuelt sammenligne de to lister for at se om der er matches. Noget i denne henretning:
$blog = mysql_query("SELECT object_id FROM ideaal_term_relationships WHERE term_taxonomy_id = '3'"); while($blog_row = mysql_fetch_array($blog)) echo $blog_row[0] . "<br>";
$ids = mysql_query("SELECT ID FROM ideaal_posts WHERE post_status = 'publish'"); WHILE($id = mysql_fetch_array($ids)) echo $id[0] . "<br>";
Hvis du faar printet listerne af object_id'er og ID'er ud og der viser sig at vaere matches, saa skal vi til for alvor at kloe os bag oererne.
Håber lige du vil hjælpe mig en gang mere - har ikke helt styr på de her lidt mere avancerede måde at hente fra databaser.. :)
Har nu den her:
mysql_query("SELECT post_date, post_title, post_excerpt,ID FROM ideaal_term_relationships JOIN ideaal_posts ON ideaal_term_relationships.object_id = ideaal_posts.ID WHERE term_taxonomy_id = '3' AND post_status = 'publish' ORDER by ideaal_posts.ID DESC LIMIT 0,4") or die (mysql_error());
som virker fint!
Min database struktur er lidt underlig, så du må endelige sige til hvis det næste her ikke giver mening.. :)
I min tabel ideaal_term_relationships skal jeg finde det sted hvor det samme object_id har både term_taxonomy_id = '3' og term_taxonomy_id = '$VARIABEL'... og så kombineres med den anden - har nemlig samme problem med denne.. :)
Gør det lige nu på denne måde: mysql_query("SELECT object_id FROM ideaal_term_relationships WHERE object_id in (SELECT object_id FROM ideaal_term_relationships WHERE term_taxonomy_id = 3 order by object_id DESC) AND term_taxonomy_id = '$tag_id' LIMIT 0,4");
men kan ikke lige gennemskue hvordan den kobles på - håber du vil hjælpe igen.. :)
(object_id er saaledes ikke 'noegle' i ideaal_term_relationships tabellen med unikke vaerdier - flere raekker i tabellen kan have samme object_id nummer.)
Og hvis $tag_id (eller $VARIABEL) saa er 7, saa vil du finde et object_id nummer der baade har en term_taxonomy_id = 3 og en term_taxonomy_id = 7, altsaa med ovenstaaende vaerdier hvor object_id = 2.
Og derefter vil du finde post_date, post_title, o.s.v. hvor object_id = 2 og post_status = 'posted'. Har jeg forstaaet det korrekt?
For at faa fat i en object_id hvor der baade er en term_taxonomy_id = 3 og en der er, skal vi sige 7, saa maa du lave en JOIN query mellem to versioner af ideaal_term_relationships saaledes:
SELECT t1.object_id FROM ideaal_term_relationships t1 JOIN ideaal_term_relationships t2 ON t1.object_id = t2.object_id WHERE t1.term_taxonomy_id = 3 AND t2.term_taxonomy_id = 7
Den query indsaetter du saa i den anden query saaledes:
SELECT post_date, post_title, post_excerpt, ID FROM ideaal_posts WHERE ID = (SELECT t1.object_id FROM ideaal_term_relationships t1 JOIN ideaal_term_relationships t2 ON t1.object_id = t2.object_id WHERE t1.term_taxonomy_id = 3 AND t2.term_taxonomy_id = 7)
Den query kan du saa indsaette in din php kode (mysql_query("SELECT .....") og erstatte en af eller begge term_taxonomyPid vaerdierne med variabler, "WHERE t1.term_taxonomy_id = $tag_id1 AND t2.term_taxonomy_id = $tag_id2
Jeg staar og skal afsted. Hvis du har en reaktion til dette skal jeg kikke paa den i eftermiddag/aften .
Fejlen er "Subquery returns more than 1 row" hvis jeg prøver at udskrive den...
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.