Toon posts:

[SQL] query werkt niet

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een vrij ingewikkelde query die wel goed werkt. Echter als ik iets simpels extra toe voeg doet hij het niet meer.
De query die wel goed werkt:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
SELECT
        url, B.id, count(url) as aantal
     FROM
        keyfoto as A,
        foto as B,
        keywords as C
     WHERE
        B.cat = 'A'
        AND
        A.key_id = C.id
        AND
        B.id = A.foto_id
        AND 
        (C.keyword like '".$keywords."')
    GROUP BY
        B.id
    HAVING  
        count(B.url) = $aantal
    ORDER BY
        B.datum DESC
    LIMIT
        $teller,$numimg


als ik achter hamkaas_keywords as C nog ', cat_e as D' zet dan werkt de query niet meer
de exacte nieuwe code die dus niet werkt:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
SELECT
        url, B.id, count(url) as aantal
     FROM
        keyfoto as A,
        foto as B,
        keywords as C,
        cat_e as D
     WHERE
        B.cat = 'A'
        AND
        A.key_id = C.id
        AND
        B.id = A.foto_id
        AND 
        (C.keyword like '".$keywords."')
    GROUP BY
        B.id
    HAVING  
        count(B.url) = $aantal
    ORDER BY
        B.datum DESC
    LIMIT
        $teller,$numimg


waarom werkt dit opeens niet meer?? Ik heb die andere table ook nog nodig voor nog een vergelijking (als B.cat niet gelijk is aan A maar wel aan E dan moet er gekeken worden in een andere tabel, die code komt er later nog bij)

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 10-05 18:52

gorgi_19

Kruimeltjes zijn weer op :9

En wat werkt er niet? WElke foutmelding krijg je? Wat is de geparsde versie? En heb je een fatsoenlijke titel, want "query werkt niet" is nogal nietszeggend :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
Ik kon geen andere titel verzinnen..
echo mysql_error() geeft niets terug.. echter vind ik opeens niets meer. Terwijl bij de eerste query, met de zelfde keywords nog 2 resultaten terug komen...

  • The Eagle
  • Registratie: Januari 2002
  • Laatst online: 22:39

The Eagle

I wear my sunglasses at night

Als ik het zo zie zou ik op het eerste gezicht zeggen dat je of met je keys zit, (koppeling tabel D met andere tabel(len), of in tabel D zit ook een waarde die je binnen de select gebruikt maar waarbij je geen alisa gebruikt. Dus als het veld 'url' in zowel B als D voorkomt en er is niet in de select gedefinieerd welke tabel er voor gebruikt moet worden, dan gaat je query idd over zijn nek :)

Overigens vind ik deze query niet echt onder de categorie "vrij ingewikkeld" vallen - maar da's dan ook en relatief begrip ;)
* The Eagle mompelt iets met viervoudige geneste subselects over 4 tabellen enzo.....

[ Voor 5% gewijzigd door The Eagle op 10-03-2005 21:03 ]

Al is het nieuws nog zo slecht, het wordt leuker als je het op zijn Brabants zegt :)


Verwijderd

Topicstarter
ach, ik vond hem al vrij ingewikkeld.... zeker als hij maar niet wil werken...
in de tabel cat_e staat de kolommen: id, pid en uid
alleen id komt in de andere tabellen ook voor

Verwijderd

Wanneer je GROUP BY gebruikt, moet je er wel voor zorgen dat de waarden die je ophaalt uniek binnen die groep zijn, of aggregated (min, max, count, etc.)
Blijkbaar heb je door die cat_e tabel toe te voegen een situatie geschapen waar dat niet het geval is.

[edit] En da's ook wel logisch, want cat_e komt nergens terug in de WHERE clause. Oftewel, je haalt iedere keer die hele tabel binnen.

[ Voor 22% gewijzigd door Verwijderd op 10-03-2005 21:32 ]


Verwijderd

Topicstarter
Ik snap even niet wat je bedoeld.
er verander toch niets binnen die groep?? en bij de tabel foto zat ook al een id dus die
group by B.id
kan het toch ook niet zijn??

Verwijderd

Er verandert niks binnen de groep, maar door jouw toevoeging van cat_e (waar niets op gecheckt word, en geen enkel veld ge-select wordt) raakt zo ongeveer elke database de draad kwijt.

Waarom wil je overigens cat_e toevoegen aan de query? Je doet er niks mee...

Verwijderd

Topicstarter
Ok, vaag.....
er zat een fout in de query dus ik haalde er alles uit tot ik de fout dus gevonden had...
dit was de laatste regel, als ik deze er weer uit haalde was het probleem opgelost.

Nu heb ik de regel weer toegevoegd en in de where exact dezelfde voorwaarde neergezet, nu doet ie het wel :S zat misschien in de buffer of zo.

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

P&W FAQ - Hoe werkt dat GROUP BY nou eigenlijk?
Je moet groupen op elk veld uit de select list, dat geen aggregate function is.

En bovendien moet je natuurlijk, zoals men hierboven zegt, wel fatsoenlijk joinen, door twee velden aan elkaar te koppelen. :P

[ Voor 25% gewijzigd door NMe op 10-03-2005 21:46 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

Post je uiteindelijke query 's? Ik ben wel benieuwd... :)
(en da's niet om je af te branden, maar om te zien of je 't goed hebt opgelost)

Verwijderd

Topicstarter
nou, het is nog steeds niet goed....
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
SELECT
        url, B.id, count(url) as aantal
     FROM
        keyfoto as A,
        foto as B,
        keywords as C,
        cat_e as D
     WHERE
        A.key_id = C.id
        AND
        B.id = A.foto_id
        AND 
        (C.keyword like '".$keywords."')
        AND
        ((B.cat = 'A') OR (B.cat = 'E' AND D.pid = B.id and D.uid = '$uid'))
    GROUP BY
        B.id
    HAVING  
        count(B.url) = $aantal
    ORDER BY
        B.datum DESC
    LIMIT
        $teller,$numimg


Het gedeelte wat niet werkt is dat het of de category A of E moet hebben, als het E heeft, moet hij de gebruiker die de zoekfunctie uitvoerd wel gekoppeld zijn aan dat item.

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Verwijderd schreef op vrijdag 11 maart 2005 @ 21:03:
nou, het is nog steeds niet goed....

8<

Het gedeelte wat niet werkt is dat het of de category A of E moet hebben, als het E heeft, moet hij de gebruiker die de zoekfunctie uitvoerd wel gekoppeld zijn aan dat item.
En wat werkt er dan precies niet?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

Topicstarter
Eigenlijk iets heel vaags...
Als er ook maar 1 category E bij zit en ook nog allemaal A's dan laat hij alleen maar de E zien.
Het lijkt dus eigenlijk dat hij de () negeerd en zo ie zo de UID controleerd.

Ik zit nu te klooien met IF statements... misschien kom ik daar verder mee...

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Je joint niet op die vierde tabel... Die join zit ergens die weggestopt in de where, tussen haakjes. Join eens op een normale manier, anders kom je nergens.
Verder klopt ook je group by nog steeds niet, zoals ik eerder in dit topic al gezegd had. :P

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

Topicstarter
als cat_e A is hoeft er niet gejoint te worden... dan heb ik die hele kolom niet nodig...

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Verwijderd schreef op vrijdag 11 maart 2005 @ 22:36:
als cat_e A is hoeft er niet gejoint te worden... dan heb ik die hele kolom niet nodig...
En toch wordt eruit geselecteerd, wat betekent dat je voor alle records die geselecteerd worden, ook nog eens de records in die laatste tabel gaat krijgen.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

Topicstarter
hoe zou ik dit dan kunnen voorkomen??

Ik zit nu gewoon wat te klooien:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
SELECT
        url, B.id, count(url) as aantal
     FROM
        keyfoto as A,
        foto as B,
        keywords as C
     IF (B.cat = 'A') THEN
        WHERE

            (A.key_id = C.id
            AND
            B.id = A.foto_id
            AND 
            (C.keyword like '".$keywords."'))
        ELSE IF (B.cat = 'E') THEN
        ,hamkaas_cat_e as D
            (A.key_id = C.id
            AND
            B.id = A.foto_id
            AND 
            (C.keyword like '".$keywords."')
            AND
            D.pid = B.id 
            AND 
            D.uid = '$uid')
        END IF
    GROUP BY
        B.id,url, aantal
    HAVING  
        count(B.url) = $aantal
    ORDER BY
        B.datum DESC
    LIMIT
        $teller,$numimg


maar dit geeft de volgende error:
code:
1
You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'IF (B.cat = 'A') THEN WHERE (A.key_id = C.id AND B

[ Voor 93% gewijzigd door Verwijderd op 11-03-2005 22:54 ]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Verwijderd schreef op vrijdag 11 maart 2005 @ 22:39:
hoe zou ik dit dan kunnen voorkomen??
Door te doen wat ik hierboven zeg. :P

Ok, ok, ik doe het even voor. :P
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
SELECT
        url, B.id, count(url) as aantal
     FROM
        keyfoto as A,
        foto as B,
        keywords as C,
        cat_e as D
     WHERE
        A.key_id = C.id
        AND
        B.id = A.foto_id
        AND 
        D.pid = B.id
        AND
        (C.keyword like '".$keywords."')
        AND
        ((B.cat = 'A') OR (B.cat = 'E' AND D.uid = '$uid'))
    GROUP BY
        B.id, url
    HAVING  
        count(B.url) = $aantal
    ORDER BY
        B.datum DESC
    LIMIT
        $teller,$numimg

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

Topicstarter
Ok, nu heb ik het volgende probleem
als ik ergens op zoek waarbij er een geval is dat cat A is en daarbij nog een geval dat de cat E is.
bijv:
keyword "blaat" komt een keer voor bij beeld 1 en 2, echter is 1 cat A en 2 cat E
dan laat hij alleen het E beeld zien (mits de uid overeenkomt)
Pagina: 1