Ik heb een 1 op meer relatie in mijn dbase, ik heb al van alles geprobeerd en gegoogled, ik vind alleen maar niet de juiste oplossing. ik heb bv

boek | woorden
-------------------
bijbel | jezus
bijbel | apostel
bijbel | wijn
vandale | radijs
vandale | oliebol

nu wil ik een AND structuur waarin ik dus het boek te zien krijg die jezus AND wijn bevat. Hoe doe ik dat in mysql ??
SELECT boek FROM tabel WHERE woorden='jezus' AND woorden='wijn'
dat werkt uiteraard niet aangezien er geen rij voor boek is die jezus en wijn bevat. ze bevatten in dit geval alleen jezus of wijn.
ah op die manier

SELECT DISTINCT(boek) AS eenboek FROM tabel WHERE woorden='jezus' OR woorden='wijn'
nee :) nu krijg ik ook boeken due alleen jezus of wijn bevatten, ik wil alle boeken die beide bevatten :)
Het kan ook niet met een JOIN ozd? Of misschien is mijn dbase structuur niet nodig en heb ik nog een extra tabel nodig ?
@ Femke,
Misschien beter om je datamodel te verbeteren.

Voorbeeldje:


--  Boeken  --
id 
boek

-- Woorden --
id
boek_id
woord


Zo heb je elk boek maar 1 x in je database en kan je alle keywoorden per boek kwijt in de tabel woorden.

Query:
(Edit: zag in andere topic dat je nieuwe MySQL versie hebt dan kan je deze Query wel gebruiken)

SELECT
   boek
FROM
   boeken
WHERE
   id =
   (SELECT
      boek_id
   FROM
      woorden
   WHERE
      woord ='jezus'
   AND
      woord ='wijn'
   )
maar hier heb je toch ook hetzelfde probleem? er zijn geen rijen in woorden die jezus en wij bevatten; er moet dus iets gejoined worden ?
<?php
SELECT
boek
FROM
boeken
WHERE
woord ='jezus'
OR
woord ='wijn'
OR
woord ='jezus'
AND
woord ='wijn'

?>
@Wout en de rest: Het is vaak slim om bij het gebruik van OR's en AND's haakjes te zetten om de prioriteit aan te geven.

(..... OR .....) AND .......
...... OR (...... AND .......)
ik ben inmiddels alweer een stukje verder, ik gooi het over een andere boeg bedankt voor jullie reacties!

ik zit nu alleen nog met 1probleempje

ik krijg nu

jezus vandale 1 0.038
jezus bijbel 1 0.027
wijn bijbel 1 0.027

dmv

SELECT * FROM `boeken` WHERE woord='jezus' OR woord='wijn'

nu wil ik eigenlijk alleen dat hij de scores van een boek optelt:

dus voor vandale: 0.038
bijbel 0.027 + 0.027

nu dacht ik dit te doen met

SELECT SUM(scores) FROM boeken GROUP BY boek HAVING woord = 'jezus' OR woord = 'wijn'

alleen dit werkt niet; hoe moet het wel?

Reageren