Meer data op de tabel

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Free laptop

free laptop

17/12/2008 13:50:00
Quote Anchor link
Hallo

Ik heb een tabel aangemaakt. (zie image)
Afbeelding
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
<html>
<head>
<title>Dit is wat HTML</title>
</head>

<body>

<table class="tabel" cellpadding="5" cellspacing="0">
    <tr bgcolor="#e5e5e5">
        <td><span>Model</span></td>
        <td><span>Aantal</span></td>
        <td colspan="2"><span>Location/code</span></td>
        <td colspan="2"><span>Kleur/code</span></td>
        </td>
    </tr>
    <tr>
        <?php
        require "../con/db.php";
        $query = "SELECT typmo,
        COUNT(DISTINCT kleur) AS typmo1,
        COUNT(DISTINCT location) AS typmo2,
        location,
        COUNT(typmo) AS typmo3,
        kleur
        FROM instock GROUP BY typmo"
;    
        $result = mysql_query($query) or die(mysql_error());

        // Print out result
        while($row = mysql_fetch_array($result)){
        echo "<tr><td><span>".$row['typmo']."</span></td>
        <td><span>"
.$row['typmo3']."</span></td>
        <td><span>"
.$row['typmo2']."</span></td>
        <td><span>"
.$row['location']."</span></td>
        <td><span>"
.$row['typmo1']."</span></td>";
        <
td><span>".$row['kleur']."</span></td>";
        }     
        }

        ?>

    </tr>
</table>

</body>
</html>

Vraagje?
Hoe kan ik bv bij meer dan een kleur en/of locatie de data op de tabel laten zien? zie tabel hieronder
Afbeelding
Hopelijk kan iemand mij helpen.
Alvast bedankt.
 
PHP hulp

PHP hulp

05/01/2025 12:51:09
 
Frank -

Frank -

17/12/2008 13:56:00
Quote Anchor link
De query is technisch en wiskundig onmogelijk en hoort dan ook een dikke error op te leveren. Maar ja, je gebruikt het überbrakke MySQL dat je met een kluitje het riet instuurt, een dikke vinger opsteekt en je veel succes met de geleverde onzin toewenst. Sterkte met deze rommel!

Kortom, zoek een echte database of ga minimaal MySQL fatsoenlijk configureren, dan maak je nog een kans.

Verder lijkt met het datamodel ook niet goed, je hebt 2 kolommen met in iedere kolom meerdere verschillende waardes. Dat is fout, in 1 kolom staat 1 soort waarde. Je kunt dus nooit 2 en 001 in 1 kolom hebben staan, dan heb je blijkbaar niet genormaliseerd. Ga dit eerst aanpassen, dat lost waarschijnlijk je huidige probleem ook al op.

Wanneer je jouw huidige query loslaat op een echte database of op een goed geconfigureerde database, zul je een fraaie foutmelding krijgen die iets roept over een foute toepassing van aggregate functies en GROUP BY.
 
Flip --

Flip --

17/12/2008 14:19:00
Quote Anchor link
je moet 3 tabellen maken

1 met je modellen en een unieke waarde per rij. Dit zou je modelnaam kunnen zijn

en dan nog 2 andere met locaties en kleuren


dus:

Tabel 1:
Charles Dale 50

Tabel 2:
Charles Dale 001
Charles Dale 002

Tabel 3:
Charles Dale Black
Charles Dale Silver
Charles Dale Wood

en dan om alles te krijgen met 1 query gebruik je een JOIN. WHERE charles Dale natuurlijk. je kan er ook voor kiezen ipv de volledige naam een id te gebruiken.
 
Frank -

Frank -

17/12/2008 14:24:00
Quote Anchor link
@Flip: Ik mag toch hopen dat je dan niet in 3 tabellen Charles gaat opslaan, dat zou niet best zijn! Gewoon een foreign key en klaar is kees.

Quote:
je kan er ook voor kiezen ipv de volledige naam een id te gebruiken
Kiezen??? Er valt weinig te kiezen, een foreign key laat je verwijzen naar een primary key en dat is normaal gesproken een id. Dat maakt de boel ook al snel een factor 1000 sneller...
 
Flip --

Flip --

17/12/2008 14:26:00
Quote Anchor link
Het werkt.

De keuze is tussen dingen die meer geoptimaliseerd zijn of dingen die makkelijker te begrijpen en te lezen zijn.

Ik wist het nog niet, ik ga gelijk ff googlen naar foreign key :)
 
Frank -

Frank -

17/12/2008 14:32:00
Quote Anchor link
Flip schreef op 17.12.2008 14:26:
Het werkt.
Er zit een héél groot verschil tussen "het werkt" en "het lijkt te werken"... 3x dezelfde data opslaan is 3x een kans lopen op een corrupte database.

Quote:
De keuze is tussen dingen die meer geoptimaliseerd zijn of dingen die makkelijker te begrijpen en te lezen zijn.
Nee, het verschil tussen kennis en een gebrek aan kennis. Of is een corrupte database ineens een gewenste functionaliteit?

Quote:
Ik wist het nog niet, ik ga gelijk ff googlen naar foreign key :)
Dan heb je blijkbaar nog nooit met een relationele database gewerkt en/of genormaliseerd, je kunt niet normaliseren zonder foreign keys te definieeren.

Mocht je MySQL gebruiken, dan zul je wel de innoDB-engine van MySQL moeten selecteren omdat je anders géén foreign keys kunt aanmaken en dus geen relationele database kunt aanmaken (en onderhouden) in MySQL.

MySQL is dan ook redelijk ***beeeep***.
 
Flip --

Flip --

17/12/2008 14:47:00
Quote Anchor link
Nouja laat het duidelijk zijn dat ik niet met je eens bent dat 3x dezelfde data opslaan per definitie leid tot een corrupte database en daarom blijf ik bij mijn standpunt: het werkt.

Het is gewoon eenvoudiger voor de beginner, that's all.

Ik heb zelf in mijn database dingen gekoppeld met een id. Ik heb wel vaker dat ik dingen gebruik zonder dat ik de term er voor weet.

uit dit voorbeeld http://dev.mysql.com/doc/refman/5.0/en/example-foreign-keys.html
haal ik dat je nog steeds een id opslaat in de andere tabel, de reference lijkt me dus meer een geheugen steuntje. Is er dan een snelheids voordeel tussen het beschrijven van een reference tegenover "gewoon" aangeven dat het aan een id uit een andere tabel gekoppeld is?
 
Frank -

Frank -

17/12/2008 15:02:00
Quote Anchor link
Flip schreef op 17.12.2008 14:47:
Nouja laat het duidelijk zijn dat ik niet met je eens bent dat 3x dezelfde data opslaan per definitie leid tot een corrupte database en daarom blijf ik bij mijn standpunt: het werkt.
En is Charles nu hetzelfde als charles of Charless? Een tikfout is zo gemaakt, een corrupte database is dus ook zo aangemaakt.

Quote:
Het is gewoon eenvoudiger voor de beginner, that's all.

Nee, dat is het niet, leer het gewoon direct goed en je hoeft geen rare toepassingen meer af te leren. Iets nieuws aanleren gaat 100x sneller dan iets afleren.

Quote:
uit dit voorbeeld http://dev.mysql.com/doc/refman/5.0/en/example-foreign-keys.html haal ik dat je nog steeds een id opslaat in de andere tabel, de reference lijkt me dus meer een geheugen steuntje.
Nee, het is geen geheugensteuntje, het is een constraint. Het bepaalt wat er gaat gebeuren als er geen match (meer) is. Zo kun je bv. een foutmelding laten geven wanneer er geen match is of de waarde op NULL laten zetten.

Quote:
Is er dan een snelheids voordeel tussen het beschrijven van een reference tegenover "gewoon" aangeven dat het aan een id uit een andere tabel gekoppeld is?
Jouw "gewoon aangeven" heeft geen enkele betekenis, is een volkomen waardeloos gegeven. Jouw applicatie kan technisch onmogelijk constraints afdwingen, jouw applicatie krijgt namelijk altijd gegevens uit de database die mogelijk al zijn achterhaald. Je kunt dus geen foutmelding geven wanneer er geen match meer is, wellicht is die er nu al wel weer. Je weet het niet, alleen de database kan dit weten. Denk maar aan de situatie dat user A gegevens selecteert en een fractie van een seconde later verwijdert user B deze gegevens. Ondertussen krijgt user A de gegevens op het scherm... Deze bestaan alleen niet meer! Dit valt met een applicatie onmogelijk vast te stellen, dat kan alleen in de database en daarbij heb je foreign keys nodig. (zie de handleiding van een willekeurige RDBMS)

Met de juiste indexen (en een FK is ook een type index) kan je database zomaar 1000x sneller worden, dat is niets bijzonders.

Tip: Ga je eens verdiepen in relationele databases, je slaat hier en daar wel een plank mis.
 



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.