PHP Array output

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: « vorige 1 2

Bart Smulders

Bart Smulders

04/02/2019 20:52:57
Quote Anchor link
- Ariën - op 04/02/2019 20:38:30:
Het zijn categorieën, dus die horen in één tabel. Maar je kan voor subcategorieën dan aangeven welke categorieID de 'parent' id


indien ik naar dit kijk zie ik bv niet in hoe je dan verschillende talen gaat kunnen mengen in normalisatie.

Als ik een Parent id gebruik en dezelfde subcategorie is ergens anders ook van toepassing maar in een andere parent id dan moet ik dit veld dubbel aanmaken.

Catid=1 omschrijving=Audio
subcatomschrijving=kabels parentid=1
Catid=2 Omschrijving=Industrie
Subcatomschrijving=kabels Parentid=2

Op deze manier heb ik het woord kabels 2 keer ingevuld... Als ik dan kabels wil hernoemen...

In de volgende tabel ga ik de categorie ,subcategorie toewijzen aan een artikel.
Tabel Artikel_indexatie
ArtikelId
Categorie
Subcategorie0
Subcategorie1
 
PHP hulp

PHP hulp

10/11/2024 20:47:56
 
- Ariën  -
Beheerder

- Ariën -

04/02/2019 20:55:41
Quote Anchor link
Je moet sowieso geen velden of tabellen gaan nummeren, en in de breedtte werken.
Probeer zo veel mogelijk verticaal een oplossing te zoeken.
 
Thomas van den Heuvel

Thomas van den Heuvel

04/02/2019 22:40:53
Quote Anchor link
Bart Smulders op 04/02/2019 20:52:57:
Op deze manier heb ik het woord kabels 2 keer ingevuld... Als ik dan kabels wil hernoemen...

Audiokabels zijn sowieso iets anders dan industriële kabels lijkt mij, dus die zouden sowieso in twee aparte records moeten staan. Die je vervolgens prima apart kunt renamen.

Zodra je tabellen of kolommen van een numeriek suffix voorziet is het tijd om na te denken hoe je e.e.a. indeelt.

Maak één generieke tabel met hierin een kolom parent_category_id die NULL mag zijn. Betreft het een hoofdcategorie is deze NULL, betreft het een subcategorie, vul dan in parent_category_id de hoger gelegen categorie in. Linkjes in een eerder bericht van mij leggen uit hoe je al deze categorieën met één query uitleest.
 
Bart Smulders

Bart Smulders

05/02/2019 21:26:27
Quote Anchor link
Uiteindelijk is dit het resultaat geworden dat werkt.Toch vroeg ik mij af of de explode en combine array niet op een andere manier konden uitgewerkt die nog sneller/ efficiënter is.

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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<?php
$sql
= "SELECT
(SELECT group_concat( DISTINCT CatId )
FROM Artikelen_Categorie
) AS CatId,

(SELECT group_concat( DISTINCT OmschrijvingNL )
FROM Artikelen_Categorie
) AS OmschrijvingNL,

(SELECT group_concat( DISTINCT SubcatId )
FROM Artikelen_Subcategorie
) AS SubcatId,

(SELECT group_concat( DISTINCT SomschrijvingNL )
FROM Artikelen_Subcategorie
) AS SomschrijvingNL,

(SELECT group_concat( DISTINCT SubbcatId )
FROM Artikelen_Subbcategorie
) AS SubbcatId,

(SELECT group_concat( DISTINCT SsomschrijvingNL )
FROM Artikelen_Subbcategorie
) AS SsomschrijvingNL"
;
$result = $con->query($sql);

if ($result->num_rows > 0) {
    // output data of each row
    
    while($row = $result->fetch_assoc()) {
$rowf[]=$row;
        }
}

foreach($rowf as $rows ){
    $Pre1=$rows["CatId"];
    $Pre2=$rows["OmschrijvingNL"];
    $Pre3=$rows["SubcatId"];
    $Pre4=$rows["SomschrijvingNL"];
    $Pre5=$rows["SubbcatId"];
    $Pre6=$rows["SsomschrijvingNL"];
    
}

$Gd1 = explode(",", $Pre1);
$Gd2 = explode(",", $Pre2);
$Gd3 = explode(",", $Pre3);
$Gd4 = explode(",", $Pre4);
$Gd5 = explode(",", $Pre5);
$Gd6 = explode(",", $Pre6);
$hoofdcat[]=array_combine($Gd1,$Gd2);
$Subcat0[]=array_combine($Gd3,$Gd4);
$Subcat1[]=array_combine($Gd5,$Gd6);

?>

Vervolgens lees ik dan de nieuwe array zo uit op de plaats waar ik ze nodig heb
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
foreach ($hoofdcat as $ka => $va ) {
            
            foreach($va as $k =>$v ){
            
  echo " <option Id=".$k." value=".$k.">".$v."</option>";
            }
}

?>
 
Thomas van den Heuvel

Thomas van den Heuvel

05/02/2019 21:49:10
Quote Anchor link
Geef eens een concreet voorbeeld van hoe de data gestructureerd is. Dit bepaalt doorgaans hoe je dit het beste kunt organiseren in de database.

Geef vervolgens een voorbeeld van hoe je deze data wilt representeren. Dit leidt mogelijk tot nieuwe inzichten hoe je dit anders/beter kunt organiseren in de database.

Wanneer je je in allerlei bochten moet wringen om de data uit je database te wringen op de wijze zoals je deze wilt gebruiken is dit in een indicatie dat deze niet goed is gestructureerd.
 
Bart Smulders

Bart Smulders

05/02/2019 22:26:36
Quote Anchor link
@Thomas
Dit dient om de categorie ,subcategorie,sub sub categorie weer te geven. Telkens in een option select box . Zodat je een artikel kan aanmaken op een eenvoudige manier.

Ik weet dat jij gebruikt maakt van CategorieId en parentId voor het aanmaken de categorie structuur.

Indien ik normalisatie wil toepassen kan ik deze strategie echter niet volgen aangezien ik dan null velden krijg voor sommige artikelen... helaas niet toegelaten na 1NF .

Vandaar is mijn structuur als volgt.

Tabel -> Artikelen_Categorie
CatId OmschrijvingNL
1 Audio
2 Automatisatie
6 Behuizingen
4 Connectoren
7 Diagnostiek
3 Domotica
8 Halfgeleiders
5 Kabels
10 Sensoren
9 Voedingen

Tabel -> Artikelen_Subcategorie
SubcatId SomschrijvingNL
1 Luidsprekers
2 Voorversterkers
3 Eindversterkers
4 Mengversterkers
5 Matrix
6 Geluidsbronnen
7 Signaalomvormers
8 Bedieningen
9 Aandrijvingen
10 Slagbomen
11 Verkeerscontrolepalen
12 Parking Systemen
13 Deuren
14 Motorsturing
15 Toegangscontrole
16 Microcontrollers
17 Netvoedingen
18 Lichtsensoren

Tabel -> Artikelen_Subbcategorie

SubbcatId SsomschrijvingNL
10 Codeklavieren
1 Draaihekken
9 Drukknoppen
3 Garagedeuren
6 Handzenders
11 Lichtsluis
5 Rolluiken
2 Schuifpoorten
8 Sleutelcontact
4 Vouwdeuren
7 Wandzenders



Elke tabel moet in een option select box komen .

Indien je een union of join doet vult hij de waarden die ontbreken bij andere op wat niet het gewenst resultaat geeft.


Als ik nu dus een artikel wil gaan indexeren

heb ik telkens het artikelId als FK
Tabel -> Artikel_Index
ArtikelId CategorieId

Tabel -> Artikel_SubIndex
ArtikelId -> SubcategorieId

Tabel -> Artikel_SubbIndex
ArtikelId -> SubbcategorieId


Zo vermijd ik null waarden

Hoe werk je dan met verschillende talen in jou opstelling?
 
Thomas van den Heuvel

Thomas van den Heuvel

05/02/2019 22:51:22
Quote Anchor link
Talen? Hoe komen we ineens op talen? Dat los je toch op een hele andere plaats op en staat verder los van de structurering van data? Desnoods maak je een kolom bij per taal voor de tabellen met beschrijvingen. Of aparte taalbestanden waarbij je een standaard taal doorvertaalt naar de actuele taal, maar dat is echt een compleet apart probleem wat je ook in afzondering kunt oplossen? Dit staat verder los van het echt organiseer-vraagstuk :/

Om hier aparte tabellen voor aan te maken lijkt mij echt niet nodig.

Het probleem met bovenstaande oplossing is (ook) dat deze niet flexibel is. Wat als er nu een subcategorie bijkomt (zeg nooit nooit :))? Dan moet er weer een tabel (of twee) bijgebouwd worden en dan moet je weer code en je database openbreken.

> Indien ik normalisatie wil toepassen kan ik deze strategie echter niet volgen aangezien ik dan null velden krijg voor sommige artikelen... helaas niet toegelaten na 1NF.

Waarom blijven mensen altijd vasthouden aan een voorschrift als dit voorschrift alleen maar voor ellende zorgt? :/

In de allersimpelste vorm heb je nog steeds maar één tabel nodig:
cat_id
cat_parent_id
(eventueel cat_level, maakt queries simpeler)
cat_order
cat_label

En als je het leuk vindt om de vertalingen in die tabel te stoppen:
cat_id
cat_parent_id
(eventueel cat_level, maakt queries simpeler)
cat_order
cat_label_nl
cat_label_en
cat_label_etc?

Hiermee kun je generieke code schrijven die zelfs bepaalt hoeveel dropdowns je nodig hebt zodat je nooit een enkele letter code (noch databasestructuur) zou hoeven te veranderen, zelfs niet als er nog een sub(sub(sub))-categorie bijkomt.
Gewijzigd op 06/02/2019 00:08:45 door Thomas van den Heuvel
 

Pagina: « vorige 1 2



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.