|
| Oversætte Id'er til navne. Fra : Jacob d'Andrade |
Dato : 22-06-09 20:28 |
|
Hej ng
Har et "simpelt" problem, som jeg ikke ved hvordan jeg skal løse.
Jeg har to tabeller:
contacts og contactgroups. (MySQL)
contacts har følgende felter:
id, name, fullname, contactgroupid
contactgroups har følgende:
id, name, desc.
I contactgroupid feltet i contacts tabellen har jeg gemt, id'erne på de
grupper som personen er medlem af, adskildt med komma, dvs kontakt gruppe id
1,2,3 osv ved en enkelt bruger. Når jeg så hiver info ud om den givende
bruger, vil jeg gerne have oversat kontakt gruppe id'erne til kontakt gruppe
navnene, og præsenteret ligesom id'erne, altså adskildt med komma.
Har googlet lidt, men ved ikke hvad denne "funktion" hedder.
Håber nogen kan hjælpe.
Mvh Jacob
| |
Gert Krabsen (22-06-2009)
| Kommentar Fra : Gert Krabsen |
Dato : 22-06-09 20:42 |
|
Jacob d'Andrade skrev:
> Hej ng
>
> Har et "simpelt" problem, som jeg ikke ved hvordan jeg skal løse.
>
> Jeg har to tabeller:
>
> contacts og contactgroups. (MySQL)
>
> contacts har følgende felter:
> id, name, fullname, contactgroupid
>
> contactgroups har følgende:
> id, name, desc.
>
> I contactgroupid feltet i contacts tabellen har jeg gemt, id'erne på de
> grupper som personen er medlem af, adskildt med komma, dvs kontakt gruppe id
> 1,2,3 osv ved en enkelt bruger. Når jeg så hiver info ud om den givende
> bruger, vil jeg gerne have oversat kontakt gruppe id'erne til kontakt gruppe
> navnene, og præsenteret ligesom id'erne, altså adskildt med komma.
>
> Har googlet lidt, men ved ikke hvad denne "funktion" hedder.
>
> Håber nogen kan hjælpe.
Ja, men ikke den vej du ønsker
Det er simpelthen noget klamp at have et felt med flere værdier i. Måske
ser du ikke problemet nu, men den dag du har mere end 11 grupper og skal
finde alle de contacts, der er tilknyttet gruppe 2, hvordan gør du så det?
Du bør derfor skynde dig at lave et bedre database-design; du mangler en
tabel:
contact
contactid, name, fullname
contactgroup
contactgroupid, name, desc.
Og den nye:
-----------
contactingroup
contactingroupid, contactid, contactgroupid
...og så kigge på udtrækket bagefter..
| |
Jacob d'Andrade (23-06-2009)
| Kommentar Fra : Jacob d'Andrade |
Dato : 23-06-09 09:50 |
|
"Gert Krabsen" <fjernkrabsen@fjernkrabsenfjern.dk> skrev i meddelelsen
news:4a3fdd83$0$48245$14726298@news.sunsite.dk...
>
> Ja, men ikke den vej du ønsker
>
> Det er simpelthen noget klamp at have et felt med flere værdier i. Måske
> ser du ikke problemet nu, men den dag du har mere end 11 grupper og skal
> finde alle de contacts, der er tilknyttet gruppe 2, hvordan gør du så det?
>
>
> Du bør derfor skynde dig at lave et bedre database-design; du mangler en
> tabel:
>
>
> contact
> contactid, name, fullname
>
> contactgroup
> contactgroupid, name, desc.
>
> Og den nye:
> -----------
>
> contactingroup
> contactingroupid, contactid, contactgroupid
>
>
> ..og så kigge på udtrækket bagefter..
>
´
Ahh, ja selvfølgelig ... Jeg tror jeg kan se lyset. Jeg takker og prøver
mig frem.
Mvh Jacob
| |
Johan Holst Nielsen (22-06-2009)
| Kommentar Fra : Johan Holst Nielsen |
Dato : 22-06-09 21:25 |
|
Jacob d'Andrade wrote:
> Hej ng
>
> Har et "simpelt" problem, som jeg ikke ved hvordan jeg skal løse.
>
> Jeg har to tabeller:
>
> contacts og contactgroups. (MySQL)
>
> contacts har følgende felter:
> id, name, fullname, contactgroupid
>
> contactgroups har følgende:
> id, name, desc.
>
> I contactgroupid feltet i contacts tabellen har jeg gemt, id'erne på de
> grupper som personen er medlem af, adskildt med komma, dvs kontakt gruppe id
> 1,2,3 osv ved en enkelt bruger. Når jeg så hiver info ud om den givende
> bruger, vil jeg gerne have oversat kontakt gruppe id'erne til kontakt gruppe
> navnene, og præsenteret ligesom id'erne, altså adskildt med komma.
>
> Har googlet lidt, men ved ikke hvad denne "funktion" hedder.
Som Gert nævner - er en ændring af designet det bedste... men ellers kan
følgende bruges
<?php
$sql = "SELECT id, name FROM contactgroups";
$res = mysql_query($sql);
$groups = array();
while($r = mysql_fetch_assoc($res)) { $groups[$r['id']] = $r['name']; }
$sql = "SELECT name, fullname, contactgroupid FROM contacts ORDER BY name";
$res = mysql_query($sql);
echo '<table border="1">';
echo '<tr><th>Navn</th><th>Fuld navn</th><th>Grupper</th></tr>';
while($r = mysql_fetch_assoc($res)) {
echo '<tr>';
echo '<td>'.$r['name'].'</td>';
echo '<td>'.$r['fullname'].'</td>';
echo '<td>';
$usergroupid = explode(',',$r['contactgroupid']);
$usergroups = array();
foreach($usergroupid as $uid) { $usergroups[] = $groups[$uid]; }
echo implode(', ',$usergroups);
echo '</td>';
echo '</tr>';
}
echo '</table>';
?>
Men som sagt - ovenstående bør kun være en "nødløsning" - er ikke best
practice - langt fra.
--
Johan Holst Nielsen
www.phpgeek.dk
?>
| |
Birger Sørensen (23-06-2009)
| Kommentar Fra : Birger Sørensen |
Dato : 23-06-09 05:38 |
|
Jacob d'Andrade kom med følgende:
> Hej ng
>
> Har et "simpelt" problem, som jeg ikke ved hvordan jeg skal løse.
>
> Jeg har to tabeller:
>
> contacts og contactgroups. (MySQL)
>
> contacts har følgende felter:
> id, name, fullname, contactgroupid
>
> contactgroups har følgende:
> id, name, desc.
>
> I contactgroupid feltet i contacts tabellen har jeg gemt, id'erne på de
> grupper som personen er medlem af, adskildt med komma, dvs kontakt gruppe id
> 1,2,3 osv ved en enkelt bruger. Når jeg så hiver info ud om den givende
> bruger, vil jeg gerne have oversat kontakt gruppe id'erne til kontakt gruppe
> navnene, og præsenteret ligesom id'erne, altså adskildt med komma.
>
> Har googlet lidt, men ved ikke hvad denne "funktion" hedder.
>
> Håber nogen kan hjælpe.
>
> Mvh Jacob
En til mange relationer, bør altid representeres som separat tabel.
Birger
--
http://varmeretter.dk - billig, sund og hurtig mad
http://bbsorensen.dk
| |
|
|