Ik wil graag in een database woordvolgorde van een zin opslaan,

nu heb ik het volgende bedacht

ID | Woord | Positie

ID is de ID die aan een zin wordt gegeven, Woord het woord en Positie de positie in de zin dus bv

003 | dit | 0
003 | is | 1
003 | een | 2
003 | voorbeeld | 3

nu wil ik graag dmv SQL bepalen door welk woord bijvoorbeeld 'een' werd gevolgd in de zin met ID 3. Hoe doe ik dat? Of is dit een verkeerde opzet van mijn tabel?
SELECT
woord
FROM
woorden
WHERE
positie = (SELECT positie+1 AS positienieuw FROM woorden WHERE woord = 'een' AND zinid = 3)
AND
zinid = 3
PHP Newbie schreef op 07.11.2008 17:22
SELECT
woord
FROM
woorden
WHERE
positie = (SELECT positie+1 AS positienieuw FROM woorden WHERE woord = 'een' AND zinid = 3)
AND
zinid = 3


Bedankt.
En als ik nu bijvoorbeeld alle woorden wil hebben die op woord X volgen? Kan dat ook met SQL?

Zeer eenvoudig:

WHERE
  positie > (SELECT ...
Blanche schreef op 07.11.2008 22:18
Zeer eenvoudig:

WHERE
  positie > (SELECT ...


Hoe bedoel je dat exact?
Het gaat dus om meerdere ID's aangezien het woord in meerdere zinnen kan voorkomen. Ik wil dus alle opvolgingen en niet alleen van zin met ID x
Dus laat je dit weg:
AND zinid = 3
SanThe schreef op 08.11.2008 00:09
Dus laat je dit weg:
AND zinid = 3


dat klopt volgens mij niet want dan krijg je meerdere waarden in de subquery en dat kan niet ..
SELECT
woord
FROM
woorden
WHERE
positie > (SELECT positie FROM woorden WHERE woord = 'een' AND zinid = 3)
AND
zinid = 3

dit bedoeld Blanche volkomen terecht
Hmm, je de vraag ook op een andere manier lezen: het gaat om de woorden die op een specifiek woord volgen uit alle zinnen. Dus niet alle woorden uit 1 zin maar telkens het opvolgende woord uit alle zinnen.

Ik heb er zo snel geen oplossing voor en ik betwijfel of dat je binnen 1 query gaat lukken...
Blanche schreef op 08.11.2008 21:55
Hmm, je de vraag ook op een andere manier lezen: het gaat om de woorden die op een specifiek woord volgen uit alle zinnen. Dus niet alle woorden uit 1 zin maar telkens het opvolgende woord uit alle zinnen.

Ik heb er zo snel geen oplossing voor en ik betwijfel of dat je binnen 1 query gaat lukken...


Wat zou de oplossing zijn om het wel binnen 1 query te kunnen doen? Hoe zou ik dan de data moeten opslaan?
Ik weet niet of dit op MySQL werkt maar op MSSQL werkt het:

SELECT tmptbl.woord
FROM woorden left join woorden as tmptbl on tmptbl.positie=(woorden.positie+1) AND tmptbl.id=woorden.id
WHERE woorden.woord = 'een'

Misschien dat ik iemand kan helpen om dit in MySQL uit te werken...

Reageren