Avatar billede esbenn Nybegynder
24. marts 2011 - 18:33 Der 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?

På forhånd tak! :)
Avatar billede erikjacobsen Ekspert
24. marts 2011 - 18:55 #1
Det er jo så nok fordi din inderste SELECT
 
  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 ... ;)
Avatar billede esbenn Nybegynder
24. marts 2011 - 19:19 #2
Jeg ved at den KAN give flere rækker, så det er helt sikkert fejlen... Hvordan virker SELECT DISTINCT? Har aldrig brugt det før...
Avatar billede erikjacobsen Ekspert
24. marts 2011 - 19:32 #3
Kan den give flere forskellige værdier?

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å.
Avatar billede esbenn Nybegynder
24. marts 2011 - 19:46 #4
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... :)
24. marts 2011 - 20:37 #5
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.
Avatar billede esbenn Nybegynder
24. marts 2011 - 20:48 #6
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å.. :)
24. marts 2011 - 22:51 #7
1.  Det er godt det virker.
2.  Jeg var ikke opmaerksom paa dit sidste indlaeg paa det tidligere spoergsmaal.
Avatar billede esbenn Nybegynder
24. marts 2011 - 23:06 #8
Gør heller ikke noget.. Der er styr på det nu... :) Igen - tak for hjælpen!
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