Avatar billede thulesen Nybegynder
07. juni 2006 - 22:11 Der er 20 kommentarer og
1 løsning

PHP kan ikke køre query

Hej eksperter!
Nu kaster jeg håndklædet i ringen. Kan simpelthen ikke få dette til at give nogen som helst mening. Når jeg kører følgende mysql query i PHP får jeg fejlen
Unknown table 'o' in where clause
Men når jeg kører samme query i phpmyadmin giver den ingen fejl overhovedet. Hvordan i alverdan kan det hænge sammen? - Jeg giver fortabt.. Query'en burde vel være ok?

SELECT o.* FROM opskrifter as o
LEFT JOIN ingredienser as i ON (i.opskrift = o.id)
LEFT JOIN ingredienser_ingredienser as i2 ON (i.ingrediens = i2.id)
WHERE (o.navn LIKE '%søg%' OR beskrivelse LIKE '%søg%' OR i2.navn LIKE '%søg%')
group by o.id
order by o.navn ascUnknown
Avatar billede Slettet bruger
07. juni 2006 - 22:14 #1
du kan ikke vælge * (alt) med et alias.
Avatar billede jakobdo Ekspert
07. juni 2006 - 22:14 #2
Hvor kommer Unknown fra?
Avatar billede jakobdo Ekspert
07. juni 2006 - 22:14 #3
Wicez: Det mener jeg nu godt man kan???
Avatar billede Slettet bruger
07. juni 2006 - 22:15 #4
Min fejl. Jeg læste din query forkert.
Avatar billede Slettet bruger
07. juni 2006 - 22:15 #5
Jep, jeg havde overset det "FROM" :)
Avatar billede Slettet bruger
07. juni 2006 - 22:15 #6
Men jeg tror ikke man bruger AS, jeg tror det er:

SELECT o.* FROM opskrifter o
LEFT JOIN ingredienser as i ON (i.opskrift = o.id)
LEFT JOIN ingredienser_ingredienser as i2 ON (i.ingrediens = i2.id)
WHERE (o.navn LIKE '%søg%' OR beskrivelse LIKE '%søg%' OR i2.navn LIKE '%søg%')
group by o.id
order by o.navn ascUnknown

altså uden "as" i tabel-valget.
Avatar billede thulesen Nybegynder
07. juni 2006 - 22:16 #7
Ups.. Den der unknown i sidste linie er selvfølgelig ikke med i den query jeg snakker om..
Avatar billede thulesen Nybegynder
07. juni 2006 - 22:17 #8
Hmm.. Det ændrer ikke noget at fjerne "as".. desværre..
Avatar billede jakobdo Ekspert
07. juni 2006 - 22:18 #9
Wicez: AS er også ok! :o)
http://dev.mysql.com/doc/refman/4.1/en/select.html -> A table reference can be aliased using tbl_name AS alias_name or tbl_name alias_name:

Men man kan også undlade AS
Avatar billede jakobdo Ekspert
07. juni 2006 - 22:20 #10
Prøv lige at test denne SQL, ikke at den er meget anderledes:

SELECT
    o.*
FROM
    opskrifter AS o
LEFT JOIN
    ingredienser AS i
ON
    i.opskrift = o.id
LEFT JOIN
    ingredienser_ingredienser AS i2
ON
    i.ingrediens = i2.id
WHERE
    o.navn LIKE '%søg%'
OR
    o.beskrivelse LIKE '%søg%'
OR
    i2.navn LIKE '%søg%'
GROUP BY
    o.id
ORDER BY
    o.navn ASC
Avatar billede Slettet bruger
07. juni 2006 - 22:21 #11
SELECT opskrifter.* FROM opskrifter
LEFT JOIN ingredienser ON (ingredienser.opskrift = opskrifter.id)
LEFT JOIN ingredienser_ingredienser as ingredienser_ingredienser ON (ingredienser .ingrediens = ingredienser_ingredienser.id)
WHERE (opskrifter.navn LIKE '%søg%' OR beskrivelse LIKE '%søg%' OR ingredienser_ingredienser.navn LIKE '%søg%')
group by opskrifter.id
order by opskrifter.navn asc

Prøv sådan, ellers.. Uden alias
Avatar billede Slettet bruger
07. juni 2006 - 22:21 #12
Ah ja, det er rigtigt jakobdo ;o)
Avatar billede thulesen Nybegynder
07. juni 2006 - 22:39 #13
Hmm.. det er stadigt det samme.. :(
Avatar billede jakobdo Ekspert
07. juni 2006 - 22:41 #14
Hvad siger wicez' forslag?
Avatar billede thulesen Nybegynder
07. juni 2006 - 22:45 #15
Hmm.. Den er lidt anderledes.. Den siger at ingredienser_ingredienser er unknown i stedet for opskrifter..
Avatar billede Slettet bruger
07. juni 2006 - 22:56 #16
Det er vel fordi den ikke findes så? Er du sikker på, at den tabel eksisterer?

og alternativt om alle tabel- og feltnavne er stavet korrekt?
Avatar billede nielle Nybegynder
07. juni 2006 - 22:57 #17
Det kan vel også skyldes at denne:

... ingredienser_ingredienser as ingredienser_ingredienser ...

- nok skal rettes til:

... ingredienser_ingredienser ...
Avatar billede thulesen Nybegynder
07. juni 2006 - 23:20 #18
Hmm.. Jeg kan simpelthen ikke knække den her.. Det burde virke når det virker gennem phpmyadmin.. Jeg har nu lavet en omfattende work-around i php, så jeg undgår hele where-delen af query'en.. og det virker.. men tak for de gode forslag..!
Avatar billede nielle Nybegynder
08. juni 2006 - 06:53 #19
Måske er det i virkeligheden noget helt andet som går galt...

Prøv at udskrive din SQL-sætning tilt skærmen fra PHP inden at du beder MySQL om at udføre den. Det kunne være at den så andreledes ud på denne form end hvad du forventer.
Avatar billede thulesen Nybegynder
08. juni 2006 - 15:50 #20
Den query jeg har sat ind her, er lavet nøjagtigt på samme måde som du beskriver, så det burde ikke være noget problem.. Men jeg har ihvertfald løst det på en anden måde nu..
Avatar billede jakobdo Ekspert
08. juni 2006 - 15:53 #21
Prøv lige som nielle siger, udskriv SQL'en inden du skyder den af mysql_query();
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