3 tabellen koppelen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Jaap V

Jaap V

04/11/2009 11:02:00
Quote Anchor link
Ik heb 3 tabellen al klaar in mysql,
het betreft de volgende tabellen...

Categorie:
Id
Naam_cat

Cat_regels:
Id
Catnr
Klantnr
Oms (omschrijving)
Date

Relatie:
id:
Naam
Plaats
etc
etc
etc....

nu is het de bedoeling dat er in de tabel categorie ongeveer de volgende zaken komen:

Ip aderess server
ip aderess werkstation
ip aderess werkstation 2
(deze hebben allemaal een eigen id)
etc...

in de cat_regels tabel moeten de volgende zaken komen:
id (ook uniek!)
catnr is gekoppeld aan bijvoorbeeld 2 (die hij ophaalt dus uit de tabel categorie en staat voor ip aderess werkstation)
klantnr koppelt hij aan de klant uit de tabel relatie...
en omschrijving is dus bijvoorbeeld een aantal ip aderessen van het werkstation...
de datum staat dan voor wanneer het ingevoerd is...

dit moet het dus ongeveer worden...
maar weet niet cht waar te beginnen...

het is dalijk de bedoeling dat ik kan zoeken op bijvoorbeeld eerst de klant,
dan zoek ik jansen....
dan krijg ik een nieuw zoekscherm, die gaat zoeken op categorie...
daar typ ik ip...
dan wil ik dat hij alleen de resultaten geeft uit de tabel categorie waarin ip zit en die aan de klant jansen gekoppelt zijn...

en dat hij vervolgens met de categorie kan zoeken op de omschrijving dus wat erin staat,
en op de datum...

volgens mij moet ik de join gebruiken,
maar bij de join heb je nog 5 verschillende...

kan iemand mij een stuk helpen?
hoop dat het zo duidelijk is,
als dit niet is stel gerust vragen.
 
PHP hulp

PHP hulp

23/11/2024 05:06:56
 
Koen

koen

04/11/2009 11:06:00
Quote Anchor link
edit:
praatte poep, had te snel gelezen.
sorry...

maar je wilt dus eerst vergelijken op een gezochte naam, en daarna op een gezochte categorie(binnen die naam)?
Gewijzigd op 01/01/1970 01:00:00 door koen
 
Jaap V

Jaap V

04/11/2009 11:11:00
Quote Anchor link
haha wou het net gaan uitleggen :P

maar iemand nog verdere vragen?
of natuurlijk beter,
oplossingen (A)
 
Gert Koetsier

Gert Koetsier

04/11/2009 11:16:00
Quote Anchor link
Deze manier van werken is de wereld op zijn kop.
Je hebt de database al helemaal klaar, terwijl je daarNA je informatiewensen specificeert, en dan ook nog in termen als "zoeits van ...". Dat gaat natuurl;ijk niet werken.
Wat je moet doen is:
1.
 
Jaap V

Jaap V

04/11/2009 11:19:00
Quote Anchor link
ik probeer nu vooral duidelijk te maken awt de bedoeling is...
dit vind ik makelijker met databasen uitleggen dan met scripten...

als iemand hetzelfde principe kent en het waarschijnlijk gemakelijker is...

mischien wel gewoon alles in 1 tabel houden...
nu is het dus de bedoeling dat als je straks een categorie aanmaakt...
dit gebeurd voor meteen alle klanten...
dan kun je daarna op klant zoeken en als deze ondertusssen ingevuld is,
deze categorie.
dan kun je hem uitlezen,
is dit niet het geval... en is hij dus nog leeg dan krijg je de mogelijkheid om hem in te vullen...
 
Gert Koetsier

Gert Koetsier

04/11/2009 11:24:00
Quote Anchor link
Deze manier van werken is de wereld op zijn kop.
Je hebt de database al helemaal klaar, terwijl je daarNA je informatiewensen specificeert, en dan ook nog in termen als "zoeits van ...". Dat gaat natuurl;ijk niet werken.
Wat je moet doen is:
1. Eerst duidelijk opstellen welke informatie je wilt OPVRAGEN
2. Vervolgens HOE wil ik die informatie opvragen (in 1 x of m.b.v. op dropsdowns die zich openen n.a.v. van de vorige dropdown)
In feite heb je het hier over een Functioneel Ontwerp (FO)
3. Als dat eenmaal helder op papier staat (en dat is dus veel meer een kwestie van logisch denken dan van database techniek of programmeren!), dan kun je duidelijke tabellen definieren (volgens normalisatieregels). Dit is het Technisch Ontwerp (TO)
4. Het leggen van relaties tussen tabellen is dan een volgende stap. Dist is de Realisatie)
5. De gerelateerde tabellen bevragen (queryen) om te testen. Dit is de testfase
6. Gebruikersfase

De door jou gekozen werkwijze loopt een keer vast.
Succes er mee!
 
Jaap V

Jaap V

04/11/2009 11:31:00
Quote Anchor link
1.
de informatie die ik wil opvragen:

ik wil dus de categorie opvragen + de omschrijving en de datum...

maar voor deze stap wordt eerst een categorie aangemaakt,
deze noem ik bijvoorbeeld ip adress...

als ik dan op opslaan druk,
moet hij de categorie ip adress voor alle gebruikers toevoegen...
daarna kan ik bijvoorbeeld de omschrijving gaan toevoegen voor 5 klanten...
de rest blijft dan nog gewoon leeg...

na verloop van tijd zou ik dit ook kunne doen voor meerdere accounten...
maar ik bedoel hiermee dat niet alles ingevuld hoeft te worden...

deze omschrijving moet wel gekoppelt zijn aan de categorie en aan de klant...

2.
informatie opvragen:

de informatie opvragen maakt me niet zoveel uit,
het gemakelijkste is denk ik 2 aparte zoekvelden maken...
dus eerst zoeken op gebruiker
en daarna op categorie...
dan beperk je natuurljk al de resultaten...

avlast bedankt voor de tips Gert koetsier...

kan iemand mij nu verder helpen?

Mvg,
Jan


--edit---

ik heb al de volgende scripts:
zoeknaam script
zoek categorie script...

eht gaat als volgt te werk...:
eerst zoek je op naam...
bijvoorbeeld type je de j in...
dan krijg je jansen...
je klikt op jansen,
hij neemt het id van jansen mee...
en dan kom je op volgende pagina...
daar staat:
Jan jansen,
zoek op categorie:
dar type je ip...
dan krijg je ip adress server
ip aderess werkstation.. etc

vervolgens klik je op ip adress server...
dan hoort hij normaal de gegevens op te halen van jansen waarbij de categorie ip addres server is.

die laatste stap lukt me niet,
kan iemand daar mee een oplossing voor bedenken>?
Gewijzigd op 01/01/1970 01:00:00 door Jaap V
 
Jaap V

Jaap V

05/11/2009 11:24:00
Quote Anchor link
ik ben nu een stukje verder,
ik haal met het laatste script het id van de klant op en van de categorie...
hij hoef dus alleen in cat-regels te zoeken naar gegevens waarbij de categorie en de klant overeen komen met de eerder gekozen gegevesn...


dit is het script wat ik nu gebruik,
na deze 2 gegevens opgehaald te hebben en ben begonnen met het id van de categorie vast door te sturen... met de get methode...

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
<?php
include('gegevens.php');
error_reporting(E_ALL);
ini_set('display_errors', 1);

$sql = mysql_query("SELECT * FROM cat-regels WHERE '".mysql_real_escape_string($_REQUEST['id'])."' LIKE Catnr");

$aantal = mysql_num_rows($sql);
        echo ($aantal == 1) ? $aantal.' resultaat gevonden' : $aantal.' resultaten gevonden';

$row = mysql_fetch_array($sql);

$catnr = $row['Catnr'];
echo 'hoi<br>';
echo $catnr;


?>


maar ik krijg hier een error!

namelijk deze:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\Documents and Settings\Klant\Bureaublad\Desktop\UsbWebserver\Root\categorie\nieuwecategorie\Nieuwe map\test.php on line 8
resultaten gevonden
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\Documents and Settings\Klant\Bureaublad\Desktop\UsbWebserver\Root\categorie\nieuwecategorie\Nieuwe map\test.php on line 11
hoi
Gewijzigd op 01/01/1970 01:00:00 door Jaap V
 
- SanThe -

- SanThe -

05/11/2009 11:27:00
Quote Anchor link
Je query zal mislukt zijn. Bouw foutafhandeling in. Ik denk dat ie op cat-regels vastloopt. Daar staat namelijk cat minus regels
 
Jacco Engel

Jacco Engel

05/11/2009 11:28:00
Quote Anchor link
Heb je hele topic niet gelezen naar valt me vooral op dat je rare dingen met naamgeving doet, velden met hoofdletters, tabellen met koppelstreepjes.

verder zou ik :
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$sql
= mysql_query("SELECT * FROM cat-regels WHERE '".mysql_real_escape_string($_REQUEST['id'])."' LIKE Catnr");
?>


eens vervangen door :
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$sql
= mysql_query("SELECT * FROM cat-regels WHERE '".mysql_real_escape_string($_REQUEST['id'])."' LIKE Catnr") or die mysql_error();
?>


dan krijg je direct op je scherm te zien WAT de DB vind dat er niet goed is ipv DAT hij vind dat er iets niet goed is
 
Jaap V

Jaap V

05/11/2009 11:31:00
Quote Anchor link
bedankt voor de reactie,
fout afhandeling zit er toch wel in?
bovenaan document?


maar ik heb de cat-regels veranderd in catregels...

en hij werkt nu gewoon :)
 
- SanThe -

- SanThe -

05/11/2009 11:33:00
Quote Anchor link
Incarnez schreef op 05.11.2009 11:31:
fout afhandeling zit er toch wel in?
bovenaan document?

Nee, daarmee zet je de php errors aan, niet die van mysql. De query's hebben een eigen foutafhandeling nodig.
 
Jacco Engel

Jacco Engel

05/11/2009 11:36:00
Quote Anchor link
Incarnez schreef op 05.11.2009 11:31:
bedankt voor de reactie,
fout afhandeling zit er toch wel in?
bovenaan document?


maar ik heb de cat-regels veranderd in catregels...

en hij werkt nu gewoon :)
h

Vrij logisch ik zou ook over de pis gaan als ze mij zouden vragen om regels van cat af te trekken .....
 
Jaap V

Jaap V

06/11/2009 09:03:00
Quote Anchor link
haha inderdaad,
ben nog steeds een beginner,
maar bedankt voor de hulp....

maar nu zit ik weer met een vraagje...

heb nu de volgende scripts "af":
Zoeken naar klanten + selecteren en id meenemen...
Zoeken naar Categorie + selecteren en id meenemen....

de 3de pagina geeft resultaten weer...
de omschrijving categorie en wat gegevens over de klant...

maar als ik bijvoorbeeld bij catregels de categorie aan klant 1 koppel...

en ik zoek op klant 2... krijg ik ook categorie 1 te zien...


ik weet waar het aan licht,
maar weet nie hoe ik het moet oplosen..
dit is de categorie die zoekt in categorie:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$sql = mysql_query("SELECT * FROM categorie WHERE Naam_cat LIKE '%$zoekterm%' ");


hier lijkt mij zon regel vor te moeten:
of erbij...

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$sql = mysql_query("SELECT * FROM catregels WHERE klntnr LIKE id ");


--edit--

ik heb nu dit stukje code gemaakt:
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

include('gegevens.php');
error_reporting(E_ALL);
ini_set('display_errors', 1);

$query = mysql_query("SELECT * FROM relatie WHERE id = '".mysql_real_escape_string($_REQUEST['id'])."'");
$row  = mysql_fetch_array($query);
$naam = $row['Naam'];
$voor = $row['Voornaam'];
$id   = $row['id'];
echo '<center>';
echo 'Zoek op de categorie van de volgende klant:<br>';
echo '<b>';
echo $voor .' '.  $naam;
echo '</b><br><br>';


//de query uitvoeren
$query1 = mysql_query("SELECT * FROM catregels WHERE Klntid LIKE `".$id."` ");
                
//en de while loop wordt gestart om alles te weergeven
while($row1 = mysql_fetch_array($query1))
{

$catid = $row1['id'];
$query2 = mysql_query("SELECT * FROM categorie WHERE id LIKE `".$catid."` ");
while($row2 = mysql_fetch_array($query2))
{

echo '<table border="1" width="250"><tr><th width="50">Categorie: </th><td ALIGN="right"><a href="test.php?id='.$row1['id'].'&kl='.$id.'">'.$row2['Naam_cat'].'</a></td></tr></table><br>';
}
}

        
//er is nog niet op verzenden gedrukt. Show het formulier maar!!
 
?>


maar deze werkt helaas niet:
ik krijg namelijk dit als resultaat:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
Zoek op de categorie van de volgende klant:
Jan Verhagen


Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\Documents and Settings\Klant\Bureaublad\Desktop\UsbWebserver\Root\categorie\nieuwecategorie\Nieuwe map\zoekcat.php on line 22
 
Jacco Engel

Jacco Engel

06/11/2009 09:47:00
Quote Anchor link
Jacco schreef op 05.11.2009 11:28:
Heb je hele topic niet gelezen naar valt me vooral op dat je rare dingen met naamgeving doet, velden met hoofdletters, tabellen met koppelstreepjes.

verder zou ik :
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$sql
= mysql_query("SELECT * FROM cat-regels WHERE '".mysql_real_escape_string($_REQUEST['id'])."' LIKE Catnr");
?>


eens vervangen door :
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$sql
= mysql_query("SELECT * FROM cat-regels WHERE '".mysql_real_escape_string($_REQUEST['id'])."' LIKE Catnr") or die mysql_error();
?>


dan krijg je direct op je scherm te zien WAT de DB vind dat er niet goed is ipv DAT hij vind dat er iets niet goed is


Maar dan nu op de andere SQL toepassen
 
Jaap V

Jaap V

06/11/2009 10:09:00
Quote Anchor link
als i kdat doe krijg ik juist geen error melding meer...
vandaar dat ik dat niet toepas...
zal wel weer iets fout doen...
maar zet gewoon na het ) en voor de ;
OR DIE mysql_error()

en krijg vervolgens of gewoon witte pagina of andere vage melding...

maar heb het probleem opgelost...
had klntid staan inplaats van klntnr...

ik heb nu weer een ander vraagje,
ik heb 3 sql's...
en deze moeten in een while loop vallen...
zodat hij alle gegevens kan ophalen uit de database...

kan iemand mij daar mee helpen?

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
<?php
include('gegevens.php');
error_reporting(E_ALL);
ini_set('display_errors', 1);

$sql = mysql_query("SELECT * FROM catregels WHERE '".mysql_real_escape_string($_REQUEST['id'])."' LIKE Catnr");
$sql1 = mysql_query("SELECT * FROM categorie WHERE '".mysql_real_escape_string($_REQUEST['id'])."' LIKE id");
$sql2 = mysql_query("SELECT * FROM relatie WHERE '".mysql_real_escape_string($_REQUEST['kl'])."' LIKE id");

$aantal = mysql_num_rows($sql);
    

$row = mysql_fetch_array($sql);
$row1 = mysql_fetch_array($sql1);
$row2 = mysql_fetch_array($sql2)

echo $row2['Voornaam'] . ' ' . $row2['Naam'] . '<br>';
echo ($aantal == 1) ? $aantal.' resultaat gevonden <br>' : $aantal.' resultaten gevonden <br>';

echo '<br>Categorie: <b>' . $row1['Naam_cat'] . '</b><br>';
echo 'Omschrijving: <b>' . $row['Omschr'] . '</b><br><br>';


?>
 
Jacco Engel

Jacco Engel

06/11/2009 10:17:00
Quote Anchor link
niet lullig bedoeld maar ga gewoon eens de basis leren uit :
http://phphulp.nl/php/tutorials/3/474/

ipv hier een beginnenertut van te maken (want daar begint het topic nu een beetje op te lijken)
 
Jaap V

Jaap V

06/11/2009 10:42:00
Quote Anchor link
ik beheer de basis al...
ik weet hoe ik een while loop maak...
namelijk

while($row = mysql_fetch_array($sql));
{

}

maar hoe dit met 3 sqls in zijn werk gaat krijg ik op google al nergens gevonden...
en de tutorials leggen allemaal maar 1 uit...

dit werkt bijvoorbeeld al niet:

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
<?php
while(
$row = mysql_fetch_array($sql)
$row = mysql_fetch_array($sql1)
$row = mysql_fetch_array($sql2)
)
{

echo $row2['Voornaam'] . ' ' . $row2['Naam'] . '<br>';

echo '<br>Categorie: <b>' . $row1['Naam_cat'] . '</b><br>';
echo 'Omschrijving: <b>' . $row['Omschr'] . '</b><br><br>';
}


?>
Gewijzigd op 01/01/1970 01:00:00 door Jaap V
 
Koen

koen

06/11/2009 10:47:00
Quote Anchor link
als je ze allemaal in 1 loop wilt:

&& = moet aan beide mogelijkheden(of in dit geval alledrie) voldoen
of
|| = moet aan een van de mogelijkheden voldoen....

dus
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
while($row = mysql_fetch_array($sql)&& $row = mysql_fetch_array($sql1)&&$row = mysql_fetch_array($sql2) )
{

//&& of || mag je zelf bepalen
}
?>
 
Jaap V

Jaap V

06/11/2009 10:54:00
Quote Anchor link
zat ik toch nog redelijk dicht in de buurt :P

heb nu deze code gebruikt:
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
<?php
include('gegevens.php');
error_reporting(E_ALL);
ini_set('display_errors', 1);

$sql = mysql_query("SELECT * FROM catregels WHERE '".mysql_real_escape_string($_REQUEST['id'])."' LIKE Catnr");
$sql1 = mysql_query("SELECT * FROM categorie WHERE '".mysql_real_escape_string($_REQUEST['id'])."' LIKE id");
$sql2 = mysql_query("SELECT * FROM relatie WHERE '".mysql_real_escape_string($_REQUEST['kl'])."' LIKE id");
while(
$row = mysql_fetch_array($sql)||$row1 = mysql_fetch_array($sql1)||$row2 = mysql_fetch_array($sql2))
{

echo $row2['Voornaam'] . ' ' . $row2['Naam'] . '<br>';
echo '<br>Categorie: <b>' . $row1['Naam_cat'] . '</b><br>';
echo 'Omschrijving: <b>' . $row['Omschr'] . '</b><br><br>';
}


?>


Maar hij geeft nogal een vaag resultaat:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
Notice: Undefined variable: row2 in C:\Documents and Settings\Klant\Bureaublad\Desktop\UsbWebserver\Root\categorie\nieuwecategorie\Nieuwe map\test.php on line 12

Notice: Undefined variable: row2 in C:\Documents and Settings\Klant\Bureaublad\Desktop\UsbWebserver\Root\categorie\nieuwecategorie\Nieuwe map\test.php on line 12


Notice: Undefined variable: row1 in C:\Documents and Settings\Klant\Bureaublad\Desktop\UsbWebserver\Root\categorie\nieuwecategorie\Nieuwe map\test.php on line 13

Categorie:
Omschrijving:
 
Koen

koen

06/11/2009 10:56:00
Quote Anchor link
Incarnez schreef op 06.11.2009 10:42:
ik beheer de basis al...
ik weet hoe ik een while loop maak...
namelijk

while($row = mysql_fetch_array($sql));
{

}

maar hoe dit met 3 sqls in zijn werk gaat krijg ik op google al nergens gevonden...
en de tutorials leggen allemaal maar 1 uit...

dit werkt bijvoorbeeld al niet:

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
<?php
while(
$row = mysql_fetch_array($sql)
$row = mysql_fetch_array($sql1)
$row = mysql_fetch_array($sql2)
)
{

echo $row2['Voornaam'] . ' ' . $row2['Naam'] . '<br>';

echo '<br>Categorie: <b>' . $row1['Naam_cat'] . '</b><br>';
echo 'Omschrijving: <b>' . $row['Omschr'] . '</b><br><br>';
}


?>


je gebruikt hier alleen maar $row,
$row1 en $row2 komen pas voor in de while-statement
Gewijzigd op 01/01/1970 01:00:00 door koen
 

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.