Hallo!

Ik had een systeem gemaakt, waarmee ik kon kijken of jouw ID voorkwam in een colom van een row, bijvoorbeeld of het ID 1 voorkomt in: 23, 1
Dit werkt. Maar nu zit ik met het probleem:
Als ik kijk of het ID 1 overeen komt met bijvoorbeeld: 21, 55, 3
Dan geeft mijn systeem aan: A, 1 komt erin voor dus laten we melding zien. Maar dit is NIET de bedoeling. Alleen als jouw ID los van andere nummers staat. Mijn code is momenteel dit om het te controleren:

if(preg_match("$gelezen", $id)) {
 // REST van de code
}

$gelezen is in dit geval 221 en $id is 1
Hoe zou ik dit kunnen oplossen? En alsjeblieft geen comments dat ik een aparte tabel moet maken omdat ik dit makkelijker vind, dus geen comments hierover pls ;-)


Alvast hartstikke bedankt!
>> Hoe zou ik dit kunnen oplossen? En alsjeblieft geen comments dat ik een aparte tabel moet maken omdat ik dit makkelijker vind, dus geen comments hierover pls ;-)

Dat blijkt dat je het makkelijker vindt. Dan vind je het vast geen probleem om het zelf op te lossen, toch?
zo te zien en volgens mij...

Pas je een vergelijking toe op een string. Je zult getallen moeten vergelijken.

<?php
$array = explode(',', '21,55,3');
if(in_array(1, $array))
{
echo 'gevonden!';
}
?>

Verder ga je later hard huilen als je je eigen code nog eens terugleest...
Misschien is het toch wat raadzamer om onze tips eens op te volgen, of met goede redenen te komen waarom je juist alles komma gescheiden wilt opslaan.

En dat het 'makkelijker is', dat is geen argument, want een losse tabel gebruiken is juist nog makkelijker.
Stel.... Je wilt er iemand uithalen die halverwege de lijst staat, hoe ga je dat dan doen?

Normaal is het een DELETE-query, maar nu moet je weer extra regels schrijven.
Mijn broer heeft een manier gevonden ;-) Met een JSON array, die kan ik decode en encode hiermee kan ik bv. jouw ID uit de array halen en gelijkertijd checken of jouw id in die array komt, thnx ;-) Script zal ik vanmiddag wel laten zien ;-)

[size=xsmall]Toevoeging op 21/02/2017 07:58:57:[/size]

En het lag niet aan die code ;S maar aan mijn query, waar ik net achter kwam

$sql = $connection->query("SELECT * FROM `paneel_meldingen` WHERE `deelnemers` LIKE '%$id%' AND `gelezen`='0' ORDER BY `id` DESC");
Maar toch blijf ik benieuwd waarom je zo omslachtig doet.
LIKE '%$id%'

ja want als je op 1 zoekt en in de string staat '1111111, 2, 1' dan haalt hem er er terecht uit

als als alle enen ontbreken niet.....

zoek dan op LIKE '% $id,%'

maar helaas werkt dat weer niet als het laatste getal gezocht wordt....
FIND_IN_SET is natuurlijk een optie, maar wat je ook doet, het is langzamer dan gewoon fatsoenlijk normaliseren. Dan hoef je ook geen gekke kunstgrepen in je code uit te halen, maar kun je gewoon nette queries schrijven.
Ivo P op 21/02/2017 19:37:58

zoek dan op LIKE '% $id,%'

maar helaas werkt dat weer niet als het laatste getal gezocht wordt....

Je vergeet de spatie die vóór $id moet staan. Die is er dan weer niet bij het eerste getal. ;-)

Met een reguliere expressie zou je in MySQL het probleem met de komma aan het eind nog kunnen verhelpen:

REGEXP ' $id(,|$)'

Helaas werkt dit truukje dan weer niet met de spatie ervoor. Met een regex in PHP zou dat dan weer wel kunnen:

/(^|\s)$id(,|$)/

Maar je maakt de spatie dan weer significant. Op zich zou er niets op tegen moeten zijn als er na een komma meteen een getal komt:

/(^|\s|,)$id(,|$)/

maar het is wellicht eenvoudiger om dan op word boundaries te matchen:

/\b$id\b/

En toch ga ook ik voor een tabel. Veel sneller. ;-)
work-around: geen spaties opnemen, en altijd afsluiten met een komma. Ook als er maar 1 waarde in staat en dus ook achter het laatste getal.

En dan gaan we door naar de vragen
"hoe delete ik id=35 uit de lijst?"
"waarom wordt mijn site zo traag?"

en tenslotte "help, door een regex fout loopt er van alles in de soep en zien gebruikers elkaars berichten"

Fijn, zo zelf het wiel uitvinden en volharden dat een ovalen 6-hoek ook best wel een beetje wil rollen.

[size=xsmall]Toevoeging op 22/02/2017 10:04:20:[/size]

work-around: geen spaties opnemen, en altijd afsluiten met een komma. Ook als er maar 1 waarde in staat en dus ook achter het laatste getal.

En dan gaan we door naar de vragen
"hoe delete ik id=35 uit de lijst?"
"waarom wordt mijn site zo traag?"

en tenslotte "help, door een regex fout loopt er van alles in de soep en zien gebruikers elkaars berichten"

Fijn, zo zelf het wiel uitvinden en volharden dat een ovalen 6-hoek ook best wel een beetje wil rollen.
>> Fijn, zo zelf het wiel uitvinden en volharden dat een ovalen 6-hoek ook best wel een beetje wil rollen.
Dat zeg je nu wel, maar heb je die tests gezien met vierkante wielen op een nogal bijzondere ondergrond?
Klinkt natuurlijk leuk als in "ja het kan werken" maar dan moet je al een erg bijzondere situatie hebben, die hier niet aanwezig is uiteraard.

Reageren