Avatar billede esbenn Nybegynder
15. marts 2011 - 18:04 Der 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.. :)
15. marts 2011 - 18:55 #1
Denne JOIN query (ikke testet) skulle give dig post_date, post_title, og post_excerpt hvor term_taxonomy_id er 3 og post_status er 'publish'
15. marts 2011 - 18:59 #2
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'
Avatar billede esbenn Nybegynder
15. marts 2011 - 20:00 #3
Har prøvet følgende uden noget resultat:

$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'");
while($test_row = mysql_fetch_array($test))
{
echo $test_row['post_title'];
}
15. marts 2011 - 21:12 #4
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:

ideaal_term_relationships
object_id, term_taxonomy_id

ideaal_posts
post_date, post_title, post_excerpt, ID, post_status

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.
Avatar billede esbenn Nybegynder
15. marts 2011 - 22:39 #5
Haha... Du fejl - den burde jeg selv have set...
Men der manglede et s i posts :)

Men det virker!

Mange tak...

Smid et svar!
Avatar billede esbenn Nybegynder
15. marts 2011 - 23:03 #6
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.. :)
16. marts 2011 - 06:43 #7
Her er foreloebigt et svar som du kan acceptere for dit oprindelige spoergsmaal.

Og saa er jeg ikke sikker paa at jeg forstaar resten. 

Lad os sige du har disse vaerdier i ideaal_term_relationship:

object_id term_taxonomy_id
1                1
2                3
2                7
3                5
3                1
4                7

(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?
Avatar billede esbenn Nybegynder
16. marts 2011 - 10:23 #8
100% rigtigt forstået! :)
16. marts 2011 - 10:27 #9
Points for hvad jeg har gjort indtil nu (jeg svarede paa dit oprindelige spoergsmaal)?
Avatar billede esbenn Nybegynder
16. marts 2011 - 11:28 #10
Vil ikke snyde dig for point, havde bare glemt at give dem... Du for selvfølgeligt 100 mere når du har svaret på det sidste :)
16. marts 2011 - 12:08 #11
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 .
Avatar billede esbenn Nybegynder
22. marts 2011 - 19:33 #12
Jeg har været lidt presset, så har først haft tid til at kigget på det her til aften...

Hvad er de t1 og t2 i den kode du har lavet?

Det ser nemlig kun ud til at virke til dels..
Avatar billede esbenn Nybegynder
22. marts 2011 - 19:41 #13
Fejlen er "Subquery returns more than 1 row" hvis jeg prøver at udskrive den...
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