24. marts 2011 - 18:33Der er
7 kommentarer og 1 løsning
Fejl i udtræk fra database
Hej!
Jeg udtrækker fra min database på følgende måde: $blog_post = mysql_query("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 ='$tag_id') AND post_status = 'publish' ORDER by ideaal_posts.ID DESC LIMIT 0,4") or die (mysql_error());
Og nogle gange giver det følgende fejl: Subquery returns more than 1 row
Min database struktur er nogenlunde som følgende: ideaal_term_relationships: object_id term_taxonomy_id 1 1 2 3 2 7 3 5 3 1 4 7
og så ideaal_posts der indeholde bla post_date, post_title, post_excerpt, ID
object_id fra ideaal_term_relationships=ID i ideaal_posts
Så mit udtræk skal altså hente alle de object_id der har både term_taxonomy='3' og '$tag_id'...
Er der nogen der kan se fejl, eller hvordan den rigtigt skal laves?
SELECT t1.object_id FROM ideaal_term_relationships t1 JOIN ...osv...
giver mere end en række, sommetider. Når du vil sammenligne den med et felt, må der kun være een værdi. Så:
- find ud af hvorfor den giver mere end een række - hvis det er flere rækker med samme værdi, kan du måske bruge SELECT DISTINCT - hvis det er hvad som helst andet, må du hellere finde ud af hvad det egentlig er for en forepørgsel du vil lave ... ;)
SELECT DISTINCT ... vil sørge for at der kun er unikke værdier. HVis du har flere ens værdier, så kan du reparere på det med det, men det er lidt et hack.
Jeg har slet ikke sat mig ind i hvad det er du prøver på.
Ja det kan den... Kan også godt se det er lidt forvirrende, men min struktur er lidt underlig.. :)
Det er fordi jeg i ideaal_posts har mine egentlige posts, men de har nogle tags og kategorier som er i databasen ideaal_term_relationships.
Så skal jeg bruge alle de posts i ideaal_posts som har term_taxonomy_id 3 og $tag_id som er en variable jeg bruger til udtræk. Det ville være nemt bare at først få object_id fra ideaal_term_relationships og så hente de posts fra ideaal_posts med det ID, men problemet er at de skal være udgivet, altså have post_status = 'publish', hvis jeg første siger det som krav i andet udtræk kan jeg få nogle object_id der ikke er udgivet og derfor ende ud med færre udtræk end jeg egentligt gerne vil have...
Var det lettere at forstå? Ellers prøver jeg gerne igen... :)
Hej igen - jeg genkender koden, som er baseret paa forslag jeg kom med i et tidligere spoergsmaal. Det var ikke dengang klart at den indre forespoergsel kunne give flere resultater. Proev at erstatte "....WHERE ID = (SELECT t1.object_id...." med "...WHERE ID IN (SELECT t1.object_id..." . Saa skulle koden kunne acceptere flere resultater fra den indre query.
Ja det er det forslag du kom med, men da du ikke lige gav mere lyd fra dig i det andet spørgsmål måtte jeg lige prøve at oprette et nyt... Men det fungerer super...
Mange tak! :) Send mig et svar, så for du de 100 jeg lovede for dette problem også.. :)
Gør heller ikke noget.. Der er styr på det nu... :) Igen - tak for hjælpen!
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.