Ik heb nu een database met als tabel blog. Daaronder zitten verschillende rijen met resultaten (blog-items).
Nu zou ik van al deze rijen het veld tags willen samenvoegen.

Even een voorbeeld:

Titel      Artikel             Tags
Titel 1    Artikel inhoud 1    wonen, leven, cultuur
Titel 2    Artikel inhoud 2    werken, leven, inrichten
...


Nu kan je zien dat de laatste tag dus geen komma meer heeft. En ik zou al die tags willen samenvoegen. Dus dacht ik aan een str_replace

$tags = str_replace(',', '<br>', $row['tags']);

Maar dat gaat dus niet aangezien de laatste tag nooit een komma heeft.
Iemand een idee hoe dit wel kan opgelost worden?
Ik zou dit hele database model weggooien.

Maak voor de tags een extra tabel aan en koppel deze aan het artikel.

Bijvoorbeeld:

Artikel_ID	Titel	Artikel
1			Titel 1		Artikel inhoud 1
2			Titel 2		Artikel inhoud 2



Tag_ID	Artikel_ID	Tag
1		1		wonen
2		1		leven
3		1		cultuur
4		2		werken
5		2		leven
6		2		inrichten
Dit gaat nu niet meer. De database is al jaren geleden opgebouwd en er hangt een website aan. Ik zou een oplossing moeten hebben voor de huidige situatie.
Waar een wil is, is een weg.
Maar als je het toch zo opgeslagen wil houden; wat bedoel je precies met tags samenvoegen?

Wat wil je met de tags precies doen?
Als achter het laatste tag geen komma staat, dan verzin je die komma :


$tags = str_replace(',', '<br />', $row['tags']) . '<br />';
Die tags zullen later worden gebruikt om in een tagcloud te zetten en ze aanklikbaar te maken die dan zo naar een zoekpagina kan gaan.

Dus wat ik wil is die tags-rijen gaan samenvoegen zoals:

wonen
werken
cultuur
inrichten
...

Maar de dubbele items moeten er ook nog wel uitgehaald worden.

Momenteel ben ik aan het zoeken in deze richting:

		 $sql = "SELECT tags FROM blog WHERE actief = 'ja'";
		 $res = mysql_query($sql) or die (mysql_error());
		 
		 while($row = mysql_fetch_assoc($res))
     	 {
			 
			 $tags[] = $row;
			 
		 }
		 
//echo '<pre>';
//print_r($tags);
//echo '</pre>';

foreach ($tags as $tag) {
	echo str_replace(',', '<br>', $tag['tags']) . '<br>';
}


Dit werkt wel maar geeft nog dubbele items weer. Tags kunnen meermaals voorkomen bij verschillende artikelen, maar dit mag niet in mijn lijst.
Dat was de vraag niet.

Je had een probleem met zoeken en vervangen van een komma,

De oplossing daarvoor was goed.

Waarom kom je niet gelijk met het complete verhaal? Of komt alles bij stukjes en beetjes?

<?php
// ergens je connectie (MySQLi) maken en in $mysqli zetten

// lege array aanmaken waarin alle tags komen
$tags = array();

// de tags ophalen uit database, let op: met MySQLi
$tagsophalen = $mysqli->query("SELECT tags FROM blog WHERE actief = 'ja'");

// alleen iets doen als er uberhaupt tags zijn
if(mysqli_num_rows($tagsophalen) > 0){
	
	// door de tags heen lopen
	while($tagres = mysqli_fetch_assoc($tagsophalen)){
		
		// splitsen op de komma
		foreach(explode(',',$tagres['tags']) AS $tag){
			
			// opslaan in de array $tags
			$tags[] = $tag;
		}
	}
}

// ontdubbelen
$tags = array_unique($tags);

// eventueel nog op alfabetische volgorde zetten of whatever
// zie php.net

// printen
foreach($tags AS $tagnaam){
echo $tagnaam.'<br>';
}
?>
@Ramon: ik heb het geprobeerd maar je code werkt niet blijkbaar. Ik krijg geen resultaten. Zal eens even kijken of er iets fout in staat.
Zo dan:
<?php
// ergens je connectie (MySQLi) maken en in $mysqli zetten

// lege array aanmaken waarin alle tags komen
$tags = array();

// de tags ophalen uit database, let op: met MySQLi
$tagsophalen = $mysqli->query("SELECT tags FROM blog WHERE actief = 'ja'");

// alleen iets doen als er uberhaupt tags zijn
if(mysqli_num_rows($tagsophalen) > 0){
    
    // door de tags heen lopen
    while($tagres = mysqli_fetch_assoc($tagsophalen)){
        
	if(trim($tagres['tags']) !== ''){	
        	// splitsen op de komma
        	foreach(explode(',',$tagres['tags']) AS $tag){
            
            		// opslaan in de array $tags
            		$tags[] = $tag;
        	}
	}
    }
}

// ontdubbelen
$tags = array_unique($tags);

// eventueel nog op alfabetische volgorde zetten of whatever
// zie php.net

// printen
foreach($tags AS $tagnaam){
echo $tagnaam.'<br>';
}
?>

Werkt het dan wel?
Sorry, maar had mijn bericht even aangepast want de code werkte toch niet. Het was mijn eigen probeersel die er nog op stond. Even je nieuwe versie aan het bekijken. Ik kreeg daarnet geen resultaat.

Reageren