Ik heb een string voor elk lid aangemaakt met de ID's van medeleden die hij wil volgen.


$value = "3-7-11-2-6-";
$result= explode("-", $value);
foreach($result as $newvalue){

$sql = "SELECT * FROM markers WHERE id ='$newvalue'";
if (!$result = $mysqli->query($sql)) 
{
	echo "<li>Sorry, er zijn problemen met de website.";
}
else
{
$record = $result->fetch_assoc();
	echo "<br>".$record['cb'];
	echo "<br>".$record['id'];
	echo "<br>".$record['name'];

}
}	


Dit gedeelte werkt..
Maar nu moet ik het sluitend maken naar de datatable toe.
Dit moet aansluiten op:


// DB table to use
$table = 'markers';
 
// Table's primary key
$primaryKey = 'id';
 
// Array of database columns which should be read and sent back to DataTables.
// The `db` parameter represents the column name in the database, while the `dt`
// parameter represents the DataTables column identifier. In this case simple
// indexes

$columns = array(
	array( 'db' => 'cb', 'dt' => 'cb' ),
	array( 'db' => 'id', 'dt' => 'id' ),	
	array( 'db' => 'name', 'dt' => 'name' ),
        .
        .
        .
   );

require( 'ssp.class.php' );
 
echo json_encode(
    SSP::simple( $_GET, $sql_details, $table, $primaryKey, $columns )
);


Is dit te doen, of kan ik beter aan de clientside de oplossing zoeken?
Bedankt vast voor het meedenken..
Ik ben hier niet mee vertrouwd, maar de vraag is hoe je hier de "WHERE id = " meegeeft.
Voor de rest lijkt het standaard.

Overigens, in je eerste stuk source: In plaats van voor elke $newvalue een select te doen, kun je ook overwegen om sql als volgt te doen:

SELECT * FROM markers WHERE id IN (3, 7, 11, 2, 6)

Dan heb je in plaats van 6x select nog maar 1x select. De foreach laat je dan los op $record.
Bedankt voor het meedenken.
Datatables werkt inderdaad wat anders dan datgene waar ik normaal mee geconfronteerd wordt.
Maar wel leuk om mee te spelen.
Net je code uitgeprobeerd...dat geeft teveel problemen.
Ik heb die string echt nodig. En nu moet ik die weer gaan ontleden.
Die string wordt aangemaakt door een lid zelf op grond van het aanvinken van checkboxen uit de ledenlijst.
Er zijn wel andere methoden, maar dit werkt wel lekker...
Als het niet lukt aan de serverside, kan het waarschijnlijk ook wel aan de clientside.

Ik wil die checked checkboxen eigenlijk apart in een tweede tabel of kunnen sorteren.
Dat is wat moeilijker bij datatables.
Of ik moet een nieuwe record maken vanuit die string.
Daar stelde ik dus de vraag over.

De alerts die je in voorbeeld ziet worden gestuurd (niet in voorbeeld) naar de database om de string in te korten of te verlengen met nieuwe ID's van 'vrienden'.

http://pctraverse.nl/DataTables-1.10.11/examples/server_side/simpleZZ.php



Kun je niet doen:

$value = "3-7-11-2-6-";
$result= explode("-", $value);
$where = implode(",", $result);

Dan wordt je $value 3-7-11-2-6- omgezet in 3, 7, 11, 2, 6.
Maar goed, als het een beperkt rijtje is, zul je het misschien nauwelijks merken.
Dat werkt ook inderdaad, bedankt.
De string zal max. 25 id's bevatten, ga ik vooralsnog vanuit
Egads.

Ik heb die string echt nodig. En nu moet ik die weer gaan ontleden.

Omdat je dit probleem zelf hebt geïntroduceerd.

Die string wordt aangemaakt door een lid zelf op grond van het aanvinken van checkboxen uit de ledenlijst. Er zijn wel andere methoden, maar dit werkt wel lekker...

Erm, nee. Zoeken met dit soort constructies is een ramp. Hoe bepaal je snel of persoon X persoon Y volgt?

Als het niet lukt aan de serverside, kan het waarschijnlijk ook wel aan de clientside.

Je database bevindt zich aan de serverzijde, dus geen enkele mate van (zwarte) tovenarij aan de clientzijde zal je soelaas bieden.

Ik heb een déja vu volgens mij. Ik zou je dringend doch vriendelijk verzoeken de mogelijkheden van koppeltabellen te verkennen. Dit bespaart je later een hoop hoofdpijn.

Het serialiseren van id's is *soms* verstandig, maar in dit geval niet, lijkt mij.

EDIT: bonus:
De string zal max. 25 id's bevatten, ga ik vooralsnog vanuit

"One megabyte is enough" :)
Het is geen onwil Thomas....ik snap het gewoon niet.
Heb wel een en ander bekeken.
Als je een voorbeeld script hebt of een opzetje, heel graag...
Misschien dat ik er dan uitkom.
Neemt niet weg dat ik dan ook de koppeling moet maken naar datatables.

Wat betreft datatables.
Die heeft allerlei mogelijkheden om zaken te veranderen in de weergave van de records en te renderen.

Kijk bijvoorbeeld eens naar onze tutorial over normaliseren.

Serialiseren in plaats van normaliseren brengt allerlei complicaties met zich mee. Om er eentje uit te pikken: wat doe je als je een gebruiker moet verwijderen? Als je probeert je voor te stellen hoe dat dan zou moeten, zie je dat je opnieuw aanloopt tegen problemen die je zelf hebt geïntroduceerd, precies zoals Thomas voorspelt.
Ik heb het al eerder genoemd.
In de getoonde records komen gegevens van andere leden.
Ik heb aparte tabellen aangemaakt voor zaken als basisgegevens, googlemaps, mediagegevens, controle op inloggen, enz.
De enige relatie is de overeenkomstige member_id.
Er is geen echte relatie tussen andere leden.
Als men members wil volgen, dan is een koppeling nodig naar de ID's van die leden.
Dat wordt clientside bepaald en doorgegeven aan een tabel in de database die de ID's bijhoudt.
Hoe dat eruit ziet maakt me niet uit. Of dat een string is of een tabel via koppelen.
Maar ik zie niet hoe ik een koppeltabel kan maken van een en dezelfde tabel waar de gegevens in staan.
Dus daarom heb ik dit bedacht.
Overigens is er geen probleem als er een lid verwijderd wordt.
Want bij vergelijken komt de id dan niet meer voor. (Staat ook niet meer in de record).
Verwijderen gebeurt via administratiepaneel door de beheerder. kan ook tijdelijke block zijn, of definitief ook eventueel op IP.
Het volgen van lid B door lid A is (wel degelijk) een relatie tussen leden.

Een koppeltabel legt een verband tussen twee tabellen. Dit kan best een en dezelfde tabel zijn.

Je zou een koppeltabel "volgers" kunnen maken met de volgende structuur:
lid_id (verwijst naar de ledentabel, specifiek het lid id)
volgt_lid_id (verwijst ook naar de ledentabel, specifiek het lid id)

... that's it.

Elk record bevat de gegevens van één persoon die één ander persoon volgt.

Stel dat je de volgende leden hebt:
(id, naam)
1. Henk
2. Piet
3. Klaas
4. Jan

Als je nu wilt aangeven dat Henk (1) Klaas (3) en Jan (4) volgt, stop je twee records in de koppeltabel:
een record met lid_id 1 en volgt_lid_id 3, en
een record met lid_id 1 en volgt_lid_id 4.

Hetzelfde voor Piet (2) die Henk (1) en Klaas (3) volgt:
een record met lid_id 2 en volgt_lid_id 1, en
een record met lid_id 2 en volgt_lid_id 3.

Et cetera.

Het wordt dan ook een eitje om vraagstukken te beantwoorden als: hoeveel leden volgt lid X of hoeveel volgers heeft lid X.
Bedankt voor je uitleg Thomas.
Maar wat is nu het verschil met wat ik eerst had?
Ik had een tabel met user_id's als referentie.
In de volgende colomns had ik staan a-y ( de id's van de gekozen vrienden).
Met de user_id als referentie wordt uit de algemene tabel een record gemaakt met de gegevens van de vrienden (op grond van de vrienden_id's)
En die wordt doorgestuurd naar datatable.

Hoe krijg ik via een koppeltabel dat nu in 1 record naar mijn datatable toe?
Als ik het goed begrijp moet ik bij 1000 leden dus max. 25000 records maken.
En dan per lid alle records uitdraaien waar zijn id wordt genoemd?

Reageren