Samenvoegen van verschillende rijen in tabellen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Brecht S

Brecht S

29/08/2016 14:11:41
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
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
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$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?
Gewijzigd op 29/08/2016 14:15:04 door Brecht S
 
PHP hulp

PHP hulp

25/04/2024 02:06:58
 
Ramon van Dongen

Ramon van Dongen

29/08/2016 14:15:50
Quote Anchor link
Ik zou dit hele database model weggooien.

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

Bijvoorbeeld:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
Artikel_ID    Titel    Artikel
1            Titel 1        Artikel inhoud 1
2            Titel 2        Artikel inhoud 2


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
Tag_ID    Artikel_ID    Tag
1        1        wonen
2        1        leven
3        1        cultuur
4        2        werken
5        2        leven
6        2        inrichten
Gewijzigd op 29/08/2016 14:20:17 door Ramon van Dongen
 
Brecht S

Brecht S

29/08/2016 14:24:29
Quote Anchor link
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.
 
Ramon van Dongen

Ramon van Dongen

29/08/2016 14:31:40
Quote Anchor link
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?
 
Adoptive Solution

Adoptive Solution

29/08/2016 14:57:36
Quote Anchor link
Als achter het laatste tag geen komma staat, dan verzin je die komma :


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$tags = str_replace(',', '<br />', $row['tags']) . '<br />';
 
Brecht S

Brecht S

29/08/2016 15:15:56
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
         $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.
 
Adoptive Solution

Adoptive Solution

29/08/2016 15:35:14
Quote Anchor link
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?
 
Ramon van Dongen

Ramon van Dongen

29/08/2016 16:22:50
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?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>';
}

?>
Gewijzigd op 29/08/2016 16:24:01 door Ramon van Dongen
 
Brecht S

Brecht S

29/08/2016 16:54:25
Quote Anchor link
@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.
Gewijzigd op 29/08/2016 16:57:57 door Brecht S
 
Ramon van Dongen

Ramon van Dongen

29/08/2016 16:56:37
Quote Anchor link
Zo dan:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?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?
 
Brecht S

Brecht S

29/08/2016 16:59:53
Quote Anchor link
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.
 
Ramon van Dongen

Ramon van Dongen

29/08/2016 17:01:51
Quote Anchor link
Brecht S op 29/08/2016 16:54:25:
@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.


Waarschijnlijk heeft het te maken met MySQLi ipv MySQL functies.
 
Brecht S

Brecht S

29/08/2016 17:02:27
Quote Anchor link
Ja, blijkbaar een fout getypt bij enkele aanpassingen aan je code. Nu werkt het wel en de dubbels zijn er volgens mij ook uit. Zal nog even verder checken maar op het eerste zicht is dit de juiste code. Thanks.
 
Ramon van Dongen

Ramon van Dongen

29/08/2016 17:03:37
Quote Anchor link
Graag gedaan!

Snap je nu ook wat de code precies doet?
 
Brecht S

Brecht S

29/08/2016 17:26:06
Quote Anchor link
Ja. Jij maakt je array eerst aan op voorhand en dan ga je door de tags heen lopen. Daarna ga je de tags splitsen op de komma en dan de tags in de array steken. Daarna ga je met array_unique de dubbele waarden eruit halen.
Vervolgens het uiteindelijke resultaat tonen via een foreach loop.

Ik was in de goede richting aan het zoeken maar was er totaal nog niet ;-)
 
Adoptive Solution

Adoptive Solution

29/08/2016 18:02:14
Quote Anchor link
Omdat je er in je eentje niet uitkomt, hier wat hulp :

http://adoptive.esy.es/regexpnumm/tags.php

Allemaal gevonden op de interwebs.
 
Brecht S

Brecht S

30/08/2016 16:48:54
Quote Anchor link
@Ramon: Is er een mogelijkheid bij een query zoals deze: SELECT tags, 'EUROBLOK' AS bedrijfsnaam FROM blog WHERE actief = 'ja' AND type = 'Foto' om buiten de tags ook de bedrijfsnaam mee op te nemen? Gebaseerd op jouw eerder geposte code.

Dus:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?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, 'EUROBLOK' AS bedrijfsnaam 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>';
}

?>

En dan onderaan ipv enkel de $tagnaam weer te geven ook de $bedrijfsnaam erbij te krijgen?
Gewijzigd op 30/08/2016 16:51:35 door Brecht S
 
Adoptive Solution

Adoptive Solution

30/08/2016 19:20:05
Quote Anchor link
// eventueel nog op alfabetische volgorde zetten of whatever
// zie php.net

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
sort($tags);


Waarom bedrijfsnaam in de SELECT wordt meegegeven is mij onduidelijk.

Verder :

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
// printen
$bedrijfsnaam = 'EUROBLOK';

foreach($tags AS $tagnaam) {
    echo $tagnaam . ' - ' . $bedrijfsnaam . '<br>';
}
Gewijzigd op 30/08/2016 19:21:40 door Adoptive Solution
 
Brecht S

Brecht S

30/08/2016 19:34:14
Quote Anchor link
Dit is maar een stuk van de code. Er worden gegevens verzameld uit 2 verschillende databases. De code die ik heb gepost is daar 1 van. De andere bouw ik op op dezelfde manier en dan ga ik die array's gaan samenvoegen met array_merge.
Daarom gebruik ik in de select die bedrijfnamen omdat ik mijn tags wil koppelen met een bedrijfsnaam omdat ik anders niet weet of de tags van het ene bedrijf of van het andere bedrijf komen. De bedoeling is dat in de tag cloud die aanklikbaar zijn en dan naar de juiste pagina gaan van het bedrijf. Dus ik heb wel degelijk een bedrijfsnaam nodig.
 
Adoptive Solution

Adoptive Solution

30/08/2016 19:40:55
Quote Anchor link
Ik reageer op code die je aandraagt.

Ik kan niet ruiken dat er nog meer is.
 
Brecht S

Brecht S

30/08/2016 19:44:51
Quote Anchor link
Heb ik ook niet gezegd. Niet zo agressief reageren...
Heb je een oplossing?
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.