2 databases ONDER elkaar?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Dick van Lieshout

Dick van Lieshout

13/02/2007 19:42:00
Quote Anchor link
Het zit zo: Ik ben bezig met producten van 2 leveranciers.
Iedere leverancier heeft een eigen tabel.

Als ik nu startpagina = 1 maak, moet dat product verschijnen op de index.
Dit lukt, maar nu moet dat van beide tabellen. Als ik nu vanuit 2 tabellen selecteer, zet hij ze in 1 rij. in plaats van onder elkaar.

Dit heb ik uit een tutorial:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?
        $sql
= "SELECT t1.*, t2.* FROM ";
        $sql .= "tabel1 t1, tabel2 t2 ";
        $sql .= "WHERE (t1.startpagina = '1' AND t2.startpagina = '1')";
?>


Hij moet de producten dus onder elkaar laten verschijnen en niet achter elkaar zodat het wordt gezien als 1 product. Ik hoop dat het duidelijk is.
 
PHP hulp

PHP hulp

20/11/2024 04:45:14
 
Frank -

Frank -

13/02/2007 19:44:00
Quote Anchor link
Quote:
Ik ben bezig met producten van 2 leveranciers.
Iedere leverancier heeft een eigen tabel.
Dan is jouw datamodel niet correct. Verschillende leveranciers staan in een goed datamodel in dezelfde tabel. Je gaat echt niet voor iedere leverancier de database (en dus het hele systeem) aanpassen. Dat slaat nergens op, heeft niets met een relationele database te maken.

Oplossing: Terug naar de tekentafel en een goed datamodel opzetten. Ga normaliseren.
 
Dick van Lieshout

Dick van Lieshout

13/02/2007 19:46:00
Quote Anchor link
Ik dacht al dat het niet geschikt was, maar 1 tabel is helemaal ingevuld en werkend. Is er geen andere oplossing zodat het dan wel werkt?
 
Marvin S

Marvin S

13/02/2007 19:46:00
Quote Anchor link
"SELECT *
FROM t1, t2
WHERE (t1.startpagina = '1' AND t2.startpagina = '1');"


dit geeft als het goed is gewoon een lijstje weer met bijvoorbeeld:

artikel1
artikel3
artikel9
artikel12

Alles waar startpagina='1'
 
Frank -

Frank -

13/02/2007 19:50:00
Quote Anchor link
Dick van Lieshout schreef op 13.02.2007 19:46:
Ik dacht al dat het niet geschikt was, maar 1 tabel is helemaal ingevuld en werkend. Is er geen andere oplossing zodat het dan wel werkt?
Een workaround is geen oplossing, hooguit uitstel van excecutie. Ga de boel nu aanpassen en niet wanneer de ellende nog veel groter is geworden. Er zit een crusiale fout in jouw datamodel, dat gaat je nog een hele berg problemen opleveren.

Nu de boel opnieuw ontwerpen en de data opnieuw en correct invoeren, gaat veel sneller dan straks alle fouten en problemen 1 voor 1 met een workaround aanpakken. Vroeg of laat stort jouw database inelkaar, die garantie kan ik je geven.
 
Dick van Lieshout

Dick van Lieshout

13/02/2007 19:52:00
Quote Anchor link
Helaas...
Stel tabel1 is:
product 1 | startpagina 1
product 2 | startpagina 2

Tabel 2 is:
product 100 | startpagina 1

Nu komt er dus te staan:
product 1 | startpagina 1 | product 100 | startpagina 1
product 2 | startpagina 1 | product 100 | startpagina 1

En er moet komen:
product 1 | startpagina 1
product 2 | startpagina 1
product 100 | startpagina 1

Is het begrijpelijk?
 
Dick van Lieshout

Dick van Lieshout

13/02/2007 19:54:00
Quote Anchor link
@Frank

Ik neema an dat je gelijk hebt, maar hier baal ik nogal van. De website moet einde van de maand afzijn, daarna kan ik hem rustig aan aanpassen...
 
Klaasjan Boven

Klaasjan Boven

13/02/2007 19:58:00
Quote Anchor link
zoals Frank al zegt pak eerst het probleem aan.

De leveranciers horen in een tabel.
tevens zal er een tabel produkten komen.
Deze wordt gekoppeld aan de leveranciers met een koppeltabel

Oftewel een goede query zal zijn
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
SELECT
    produkt.naam,
    leverancier.naam
FROM
    produkten produkt,
    leveranciers leverancier,
    produktenleveranciers koppel
WHERE
    leverancier.id = koppel.leveranciers_id
AND
    produkt.id=koppel.produkt_id    


Als je trouwens een beetje handig met php / sql evt excel bent kun je nu je datamodel waarschijnlijk nog redelijk eenvoudig corrigeren
Gewijzigd op 01/01/1970 01:00:00 door Klaasjan Boven
 
Frank -

Frank -

13/02/2007 20:01:00
Quote Anchor link
Tabel 'producten':
id, INT auto_increment
id_pagina, INT, foreignkey op de tabel 'paginas'
id_leverancier, INT, foreignkey op de tabel 'leveranciers'
product VARCHAR

Tabel 'paginas':
id, INT auto_increment
pagina_nr INT
omschrijving VARCHAR

Tabel 'leveranciers':
id, INT auto_increment
naam, VARCHAR
adres, VARCHAR

Even een kort voorbeeldje.

Ga dat NU aanpassen en niet over een maand. Over een maand is de puinhoop niet meer te overzien en kun je helemaal overnieuw beginnen. Ook alle opgeslagen data wordt waardeloos!!! Lijkt me sterk dat je daar op zit te wachten. De database is de kern van jouw systeem en daar zit het nu goed fout. Dat is balen, maar het wordt nog meer balen wanneer blijkt dat je jouw huidige opzet niet/nauwelijks aan de praat zal kunnen krijgen. De problemen die je nu hebt, zijn de eerste symptomen. Bereid je maar vast voor op veel meer ellende.
 
Dick van Lieshout

Dick van Lieshout

13/02/2007 20:05:00
Quote Anchor link
Bedankt allemaal voor de snelle reacties. Er is me duidelijk gemaakt wat ik moet doen. Ik zal het uit gaan zoeken hoe, want ik ben net een paar dagen actief met PHP. Maar ik heb een start. Dus bedankt voor de informatie.
 
Frank -

Frank -

13/02/2007 20:08:00
Quote Anchor link
Quote:
De website moet einde van de maand afzijn
en dan
Quote:
want ik ben net een paar dagen actief met PHP
...

Ik mag hopen dat je meer ervaring hebt met een andere programmeertaal, anders heb je toch echt veel en veel te hoog gegrepen door nu al een database-gestuurde website te willen maken. Ook al omdat je blijkbaar niet/nauwelijks ervaring hebt met databases...

Veel succes in elk geval!

Ps. Gelukkig weet je www.phphulp.nl al te vinden, dat scheelt al een hoop ellende ;)
 



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.