[MySQL] LIKE functie levert rare resultaten op.

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • DirkZzZ
  • Registratie: September 2007
  • Laatst online: 04-09 10:02
Ik heb een query die alle toestellen ophaalt van een bepaalt merk, waar ook producten aangekoppeld zijn van een product-merksoort.

code:
1
2
3
4
5
6
7
8
9
10
11
SELECT DISTINCT `T`.`Naam` , `T`.`ID` , `M`.`Naam` AS MerkNaam
FROM (
`Type` AS T
)
JOIN `ProductenToestellen` AS PT ON `PT`.`ToestelID` = `T`.`ID`
JOIN `Producten` AS P ON `P`.`Artikelnummer` = `PT`.`Artikelnummer`
JOIN `Merken` AS M ON `M`.`ID` = `T`.`MerkID`
WHERE `T`.`MerkID` = '1'
AND `P`.`MerkID` =112
GROUP BY `P`.`Artikelnummer`
ORDER BY `T`.`Naam`


Resultaat:
code:
1
2
6210 Navigator  Nokia
6710 Navigator  Nokia


Vervolgens zou het mogelijk moeten zijn om op toestel type te gaan zoeken, dit heb ik dus geprobeert dmv. de LIKE functie. Op deze manier:


code:
1
2
3
4
5
6
7
8
9
10
11
12
SELECT DISTINCT `T`.`Naam` , `T`.`ID` , `M`.`Naam` AS MerkNaam
FROM (
`Type` AS T
)
JOIN `ProductenToestellen` AS PT ON `PT`.`ToestelID` = `T`.`ID`
JOIN `Producten` AS P ON `P`.`Artikelnummer` = `PT`.`Artikelnummer`
JOIN `Merken` AS M ON `M`.`ID` = `T`.`MerkID`
WHERE `T`.`MerkID` = '1'
AND `P`.`MerkID` =112
AND `T`.`Naam` LIKE '%navigator%'
GROUP BY `P`.`Artikelnummer`
ORDER BY `T`.`Naam`


resultaat:

code:
1
2
3
6110 Navigator  Nokia   <-----
6210 Navigator  Nokia
6710 Navigator  Nokia



Wat er nu echter gebeurt, is dat er ook toestellen tussen verschijnen die bij query 1 niet eens in de lijst voorkomen. ( Er zijn dus waarschijnlijk geen geschikte producten voor dat toestel ).
Maar zodra ik er een LIKE inzet komen deze toestellen wel in de resultaten terecht.

Ik heb het gevoel dat ik vergeet, maar ik zie niet zo direct wat het kan zijn.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

'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.


Acties:
  • 0 Henk 'm!

  • _js_
  • Registratie: Oktober 2002
  • Laatst online: 18-08 21:31
Het probleem is dat je verkeerd gebruik maakt van GROUP BY.

Als je een veld selecteert dat niet in de GROUP BY staat en je geen aggregate function toepast op dat veld, dan wordt een semi-willekeurige waarde gekozen. Blijkbaar verandert die waarde wanneer je die LIKE voorwaarde toevoegt.

Het zal handig voor je zijn om even in de Programming FAQ te kijken hoe GROUP BY werkt.

Acties:
  • 0 Henk 'm!

  • CyBeRSPiN
  • Registratie: Februari 2001
  • Laatst online: 17:03

CyBeRSPiN

sinds 2001

Snap niet waarom mysql hier geen foutmelding voor geeft, willekeurige waarden als uitkomst voor je query krijgen is nogal eng..

Acties:
  • 0 Henk 'm!

  • Manuel
  • Registratie: Maart 2008
  • Laatst online: 17:22
CyBeRSPiN schreef op maandag 14 februari 2011 @ 19:47:
Snap niet waarom mysql hier geen foutmelding voor geeft, willekeurige waarden als uitkomst voor je query krijgen is nogal eng..
Als ik mij het goed herinner doet MySQL dit niet als je hem in de stricte modus zet. Zie ook: http://dev.mysql.com/doc/refman/5.1/en/server-sql-mode.html

[ Voor 7% gewijzigd door Manuel op 14-02-2011 20:03 . Reden: *** ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

CyBeRSPiN schreef op maandag 14 februari 2011 @ 19:47:
Snap niet waarom mysql hier geen foutmelding voor geeft, willekeurige waarden als uitkomst voor je query krijgen is nogal eng..
Het is by design om zo waarden die functioneel bij elkaar horen terug te kunnen krijgen zonder erop te groupen. Maar dat gaat in deze query (en het overgrote deel van de andere query's die je kan verzinnen) niet op. ;) Bij twijfel: altijd groupen op velden die je selecteert zonder aggregate function. :)

'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.


Acties:
  • 0 Henk 'm!

  • DirkZzZ
  • Registratie: September 2007
  • Laatst online: 04-09 10:02
Hartstikke bedankt voor de tips, ik zal het morgen eens aanpassen en laten weten wat het geworden is. d:)b

[ Voor 0% gewijzigd door DirkZzZ op 14-02-2011 21:49 . Reden: Hoofdletter ]

Pagina: 1