Beware of listening to the imposter; you are undone if you once forget that the fruits of the earth belong to us all, and the earth itself to nobody.
Wat voor WHERE cluase wil je toevoegen?
Never underestimate the power of
Oh sorry, minder gelukkig typefoutjecameodski schreef op 20 september 2002 @ 10:39:
Data aftrekken met een OUTER JOIN??? Hoe bedoel je dat?
WHERE ID = 10 AND LANG_ID = 20 . Zoiets. Nix boeiend oid .Wat voor WHERE cluase wil je toevoegen?
Beware of listening to the imposter; you are undone if you once forget that the fruits of the earth belong to us all, and the earth itself to nobody.
Ik begrijp helaas nog niet helemaal wat je nou precies terug wilt hebben, dus misschien zoek je dit wel helemaal niet, maar het gebruik van COUNT (column) is in ieder geval een veel gemaakte fout.
Never underestimate the power of
Ik zal nog wat duidelijker proberen te zijn .cameodski schreef op 20 september 2002 @ 10:51:
Doe anders eens COUNT (*). Misschien is dat wat je zoekt.
Ik begrijp helaas nog niet helemaal wat je nou precies terug wilt hebben, dus misschien zoek je dit wel helemaal niet, maar het gebruik van COUNT (column) is in ieder geval een veel gemaakte fout.
Dit is dus de query zoals ik hem wil hebben :
Het probleem dus is dat zonder vet gedrukte where statement ik wel deSELECT COUNT(TBL_RESPONSE.ANSWER_ID) AS CNT_ANSW,TBL_ANSWER_LANG.
ANSWER_ID, ANSWER_ANSWERTEXT
FROM TBL_ANSWER_LANG
LEFT OUTER JOIN TBL_RESPONSE ON
TBL_RESPONSE.ANSWER_ID = TBL_ANSWER_LANG.ANSWER_ID
WHERE ID = 37
GROUP BY TBL_ANSWER_LANG.ANSWER_ID
ANSWER_ID terugkrijg waar de count 0 bij is en dat zodra ik de WHERE toevoeg die velden ineens verdwijnen en alleen velden terugkomen waar de count hoger dan 0 is . ( en dat moet dus niet )
En de count(*) verandert er niet echt veel aan ben ik bang ..
Beware of listening to the imposter; you are undone if you once forget that the fruits of the earth belong to us all, and the earth itself to nobody.
Ja, die query begrijp ik welBasszje schreef op 20 september 2002 @ 10:57:
Ik zal nog wat duidelijker proberen te zijn .
Dit is dus de query zoals ik hem wil hebben :
Soms is even een kort verhaaltje over het hoe en waarom wel duidelijk. Misschien zit je wel helemaal op een verkeerd spoor, maar dat kan ik nu niet bedenken.
Nou ben ik natuurlijk ook niet de slimste die hier rondloopt.
Never underestimate the power of
Verwijderd
Nou ja het idee is dus om uit de ene tabel wat tekst te vissen met een ID waarde die in de andere tabel ( tbl_response ) meerdere keren is opgeslagencameodski schreef op 20 september 2002 @ 11:01:
[...]
Ja, die query begrijp ik wel, maar niet wat jij nou precies van die query wilt en waarom.
Soms is even een kort verhaaltje over het hoe en waarom wel duidelijk. Misschien zit je wel helemaal op een verkeerd spoor, maar dat kan ik nu niet bedenken.
Nou ben ik natuurlijk ook niet de slimste die hier rondloopt.
Gaat n.l. over antwoorden. Dus de ene tabel is de antwoord definitie , de ander hoeveel dat antwoord gegeven is .
Dus pak van de definitie de gegevens en van de responses de count van de antwoorden
Alleen moet ie dan niet gelijk de hele zut pakken, maar nog aan een aantal andere voorwaarden voldoen dus is er een where statement nodig
Beware of listening to the imposter; you are undone if you once forget that the fruits of the earth belong to us all, and the earth itself to nobody.
Je hebt dus een filter op iets wat in de TBL_RESPONSE tabel zit. Zijn er alleen geen records in deze tabel dan filtert ie het hele ding eruit.
En dan moet je inderdaad de oplossing gebruiken van code4u.
Never underestimate the power of
LEFT JOIN ON TBL_RESPONSE.ID = TBL_ANSWER.ID AND Q_ID = 14 , dan krijg ik nog steeds alle velden terug, alleen gaat ie raar doen met de count
Lijkt me dus ook niet helemaal de oplossing ?
Ik zat trouwens ook te denken als ik het nou gewoon ranzig doe met een Cartetische prodcut te maken en deze dan te selecteren
Beware of listening to the imposter; you are undone if you once forget that the fruits of the earth belong to us all, and the earth itself to nobody.
Verwijderd
Als je wil weten welke responses meer dan 1 keer zijn gegeven kan je overigens de volgende query gebruiken:
1
2
3
4
5
6
7
8
9
10
11
| SELECT COUNT(TBL_RESPONSE.ANSWER_ID) AS CNT_ANSW, TBL_ANSWER_LANG.ANSWER_ID, ANSWER_ANSWERTEXT FROM TBL_ANSWER_LANG LEFT OUTER JOIN TBL_RESPONSE ON TBL_RESPONSE.ANSWER_ID = TBL_ANSWER_LANG.ANSWER_ID GROUP BY TBL_ANSWER_LANG.ANSWER_ID HAVING COUNT(TBL_RESPONSE.ANSWER_ID) > 0 |
HTH
PS: Gebruik code tags ipv quote tags, maak doe de opmaak van de query wat beter, en gebruik niet alleen maar hoofdletters, want de query is zo nauwelijks te lezen.
Het probleem is juist dat ik wel de ID's terug wil krijgen met de 0 waardes.Verwijderd schreef op 20 september 2002 @ 13:28:
Als je een waarde gaat testen in een tabel die je met een LEFT JOIN gejoined hebt gaat de LEFT JOIN stuk als de waarde geen record oplevert en daar is niets aan te doen. Als er wel records voor zouden met TBL_RESPONSE.ID = x zul je waarschijnlijk wel een record terugkrijgen. Wel wet je, als je geen records terugkrijgt, dat de count 0 zou zijn geweest, dus ik zie het probleem niet zo om een extra IFje te plaatsen.
Als je wil weten welke responses meer dan 1 keer zijn gegeven kan je overigens de volgende query gebruiken:
Als ik in jou genoemde statement bij de HAVING ipv check op Count >0 , maar op een andere id ( question_id = 37 bv ) krijg ik keurig netjes de counts terug, behalve de Id waardes die dus niet voorkomen in de response tabel
en die zou ik wel willen terugkrijgen, maar dan met count == 0 .
Ok. sorry, ik ben een sloddervosPS: Gebruik code tags ipv quote tags, maak doe de opmaak van de query wat beter, en gebruik niet alleen maar hoofdletters, want de query is zo nauwelijks te lezen.
Beware of listening to the imposter; you are undone if you once forget that the fruits of the earth belong to us all, and the earth itself to nobody.
COALESCE(COUNT(TBL_RESPONSE.ANSWER_ID), 0) AS CNT_ANSW
Weet niet zeker of-tie goed gaat met die count erbij...
Verwijderd
Test eerst je query zonder group by functions.
Als je dan de juiste records terug krijgt kun je je group by function (de count in dit geval) toevoegen.
Zorg er dan wel voor dat alle kolommen uit je oorspronkelijke select-clause in je group by voorkomen (zoals het hoort dus)
veel plezier.....
Hoezo klopt die group by niet danVerwijderd schreef op 20 september 2002 @ 14:40:
de group by klopt nergens.....
Test eerst je query zonder group by functions.
Als je dan de juiste records terug krijgt kun je je group by function (de count in dit geval) toevoegen.
Zorg er dan wel voor dat alle kolommen uit je oorspronkelijke select-clause in je group by voorkomen (zoals het hoort dus)
veel plezier.....
Trouwens ook met dat coalascale ( euh
Ligt dus echt aan de left join
Beware of listening to the imposter; you are undone if you once forget that the fruits of the earth belong to us all, and the earth itself to nobody.
Verwijderd
Dat beschrijf ik : je moet al je kolommen van je select-clause opnemen (ja, dat hoeft niet in mysql (itt) maar ik heb daar al behoorlijk wat problemen mee gehad.)
Bij een count (een group function) ga je groeperen. Dus.....Als ik het trouwens zonder die count doe krijg ik precies dezelfde resultaten.
Daarom zeg ik dat je eerst moet zorgen dat je query goed is.Ligt dus echt aan de left join
Als dat de juiste resultaten oplevert (er zijn dan dus records die dubbel voorkomen) kun je je daarna druk maken om je count en kun je minder makkelijk vergissingen maken
Het is helaas niet gelukt, dus ik heb naast de left join een rij inner join gedaan op alle andere tabellen waar die data uit nodig had, dus het werkt nu uiteindelijk wel
Beware of listening to the imposter; you are undone if you once forget that the fruits of the earth belong to us all, and the earth itself to nobody.
Verwijderd
voorbeeld op basis van jou situatie:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| got_answers; +-----------+-------------+ | answer_id | answer_text | +-----------+-------------+ | 1 | a1 | | 2 | a2 | | 3 | a3 | | 4 | a4 | +-----------+-------------+ got_response; +-------------+-----------+ | response_id | answer_id | +-------------+-----------+ | 1 | 1 | | 2 | 1 | | 3 | 3 | | 4 | 3 | | 5 | 3 | | 6 | 4 | +-------------+-----------+ |
je wilt van alle answers het aantal hebben:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| SELECT
ga.answer_id,
ga.answer_text,
COUNT(gr.answer_id) AS ans_cnt
FROM
got_answers ga
LEFT JOIN
got_response gr ON ga.answer_id=gr.answer_id
GROUP BY
ga.answer_id,ga.answer_text;
resultaat:
+-----------+-------------+---------+
| answer_id | answer_text | ans_cnt |
+-----------+-------------+---------+
| 1 | a1 | 2 |
| 2 | a2 | 0 |
| 3 | a3 | 3 |
| 4 | a4 | 1 |
+-----------+-------------+---------+
correct |
voorbeeld met where, waar de uitkomst 0 moet zijn (zie boven answer_id=2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| SELECT
ga.answer_id,
ga.answer_text,
COUNT(gr.answer_id) AS ans_cnt
FROM
got_answers ga
LEFT JOIN
got_response gr ON ga.answer_id=gr.answer_id
WHERE
ga.answer_id=2
GROUP BY
ga.answer_id,ga.answer_text;
resultaat:
+-----------+-------------+---------+
| answer_id | answer_text | ans_cnt |
+-----------+-------------+---------+
| 2 | a2 | 0 |
+-----------+-------------+---------+
correct |
nu nog even een voorbeeld waarvan er wel waarde is (answer_id=3)
weer hetzelfde:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| SELECT
ga.answer_id,
ga.answer_text,
COUNT(gr.answer_id) AS ans_cnt
FROM
got_answers ga
LEFT JOIN
got_response gr ON ga.answer_id=gr.answer_id
WHERE
ga.answer_id=3
GROUP BY
ga.answer_id,ga.answer_text;
+-----------+-------------+---------+
| answer_id | answer_text | ans_cnt |
+-----------+-------------+---------+
| 3 | a3 | 3 |
+-----------+-------------+---------+
correct |
nog even voor performance check EXPLAIN gebruiken:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| EXPLAIN
SELECT
ga.answer_id,
ga.answer_text,
COUNT(gr.answer_id) AS ans_cnt
FROM
got_answers ga
LEFT JOIN
got_response gr ON ga.answer_id=gr.answer_id
WHERE
ga.answer_id=3
GROUP BY
ga.answer_id,ga.answer_text;
+-------+-------+---------------+-----------+---------+-------+------+-------------+
| table | type | possible_keys | key | key_len | ref | rows | Extra |
+-------+-------+---------------+-----------+---------+-------+------+-------------+
| ga | const | PRIMARY | PRIMARY | 1 | const | 1 | |
| gr | ref | answer_id | answer_id | 1 | const | 2 | Using index |
+-------+-------+---------------+-----------+---------+-------+------+-------------+
netjes :) |
sql valt wel mee toch
Verwijderd
1
2
3
4
5
6
7
8
9
10
11
12
13
| SELECT
Productcategorieen.ProductcatNaam,
Productcategorieen.ProductcatId,
Count(Productcategorieen.ProductcatId) AS Aantal
FROM
Producten,
Productcategorieen
LEFT JOIN
Productcategorieen P ON Productcategorieen.ProductcatId = Producten.ProductSoort
GROUP BY
Productcategorieen.ProductcatId
ORDER BY
ProductcatNaam ASC |
De count doet hier heel raar.
Er komt 7,5,3 ipv 2,1,0 wat zou moeten.
Ziet iemand hier het probleem
Verder is het hier niet gewenst om oude topics van in dit geval ruim 4 jaar oud omhoog te schoppen met een eigen vraag waarin je een minimale hoeveelheid eigen inzet ten toon spreidt. Zie Programming Beleid - De "quickstart" voor richtlijnen hoe het wel hoort; mocht je problemen blijven houden, dan kun je volgens die richtlijnen een nieuw topic openen.
'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.
Dit topic is gesloten.
![]()