beste manier relatie's
na al die jaren ga ik me toch maar weer is in php en sql verdiepen. ben nu bezig met een projectje, en wil graag wat advies hoe jullie dit doen, zodat ik dit gelijk op de juiste manier kan doen.
ik heb nu 2 database tabellen welke beide worden weergegeven in een datagrid. nu komt het nu moet ik tabellen gaan koppelen aan elkaar.
voorbeeld:
tabel accounts:
id
gebruikersnaam
wachtwoord
email_wachtwoord
tabel: proxy
id
proxy
gebruikersnaam
wachtwoord
poort
provider
prijs
hierbij is het zo, dat het de bedoeling is dat elk account 1 proxy kan hebben. maar elke proxy tot meerdere accounts kan toebehoren. nu wil ik me datagrid van accounts, ook de eventuele proxy weergeven die bij dit account hoort. hoe kan ik dit het best doen? dacht zelf aan het volgende
1 extra tabel aanmaken waarin alles gekoppeld word(later ook categorieen)
accounts_settings
id
accounts_id(uniek id van elk account)
proxy_id(uniek id van elke proxy)
op deze manier kan ik met een 2e query kijken welke proxy er bij het account hoort. ook moet het nog mogelijk te zijn om later snel te kijken hoeveel accounts er bijvoorbeeld op 1 proxy staan.
Is dit de juiste manier om te doen? of is er een betere manier voor? en hoe zit het met de tabel relatie vast leggen op database niveau zodat. als bijvoorbeeld 1 proxy verwijderd word, ook de record uit accounts_settings word verwijderd.
hoop dat me vraag een beetje duidelijk is.
alvast bedankt voor het meedenken.
groetjes
jasper
Ik zou in de account tabel een veld proxy_id toevoegen omdat elk account toch maar 1 proxy kan hebben.
Daan Slagter op 25/04/2016 23:55:46:
Ik zou in de account tabel een veld proxy_id toevoegen omdat elk account toch maar 1 proxy kan hebben.
Precies. Dit noemen we dan een many-to-one relatie. Hier heb je geen koppeltabel voor nodig. Een koppel tabel gebruik je bij een many-to-many relatie wat het geval zou zijn als een account meerdere proxies zou mogen hebben EN een proxy ook aan meerdere accounts gekoppeld zou kunnen worden.
Voor het ophalen van de gegevens uit beiden tabellen hoef je geen twee queries uit te voeren. Dit kan met één query met een zogenoemde JOIN.
leesvoer
Indien je uitgangspunt de proxy tabel is (wat in bovenstaande SQL code niet het geval is, daar is de accounts tabel het uitgangspunt) zou je een LEFT JOIN moeten gebruiken geloof ik.
beetje late reactie', maar erg druk gehad, en geen tijd gehad om veder te gaan.
Het werkt nu naar behoren :)
"SELECT a.id, a.rslogin, a.rswachtwoord, a.gebruikersnaam, p.proxy, c.subcategory
FROM bots a
INNER JOIN proxy p ON a.proxy_id=p.id
INNER JOIN subcategory c ON a.category_id=c.subcat_id
WHERE category_id = $sub_category
";
Nu laat die netjes alles categorieen zien, van welke categorie er geselecteerd is. alleen wil ik zoeken op 2 mogelijkeden. Zoekmogelijkheid 1 is alleen op proxy zoekmogelijkheid 2 is alleen op category en. zoekmogelijkheid 3 moet zijn. zowel op categorie als op proxy. ben al een beetje lopen klotten met and en or.
$query = "SELECT a.id, a.rslogin, a.rswachtwoord, a.gebruikersnaam, p.proxy, c.subcategory
FROM bots a
INNER JOIN proxy p ON a.proxy_id=p.id
INNER JOIN subcategory c ON a.category_id=c.subcat_id
WHERE proxy_id = $proxy AND category_id = $sub_category
OR proxy_id = $proxy AND category_id
OR category_id = $sub_category
";
alleen laat die dan continu of alleen de geselecteerde van de proxy zien of categorie.
Iemand een idee of dit uberhaut mogelijk is in 1 query of zal ik hier een 2e query voor moeten aanmaken?
groetjes jasper
Frank Nietbelangrijk op 17/05/2016 22:26:09:
Hey frank, bedankt voor je je reactie. alleen op deze manier laat die bij mij alle resutaten zien.
Er word voor dat het formulier word verzonden. gekozen uit een proxy en/of categorie. het lukt me om of alleen op categorie te zoeken of alleen proxy. maar het moet mogelijk zijn dat als alleen categorie gekozen word alles uit die categorie laat zien met alle proxy's. en als ik alleen proxy's selecteer die alles laat zien met alleen die proxy,dat lukt. alleen wil ik dat als beide gekozen worden die alleen de resultaten met de geselecteerde proxy en categorie laat zien
verander OR in AND
Frank Nietbelangrijk op 18/05/2016 00:11:22:
verander OR in AND
Zo laat die resultaten zien van proxy en categorie samen, dit is goed. alleen moet de query ook nog werken als er alleen gezocht word op proxy of categorie. of gaat die niet samen in 1 query?
Iemand een idee? hoe ik dit in 1 query kan doen? anders ga ik hem opsplitsen in 3 query's 1 voor category 1 voor proxy en 1 voor category en proxy
Dan doe je zoiets:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
if($parameter != '') {
$whereClause = "WHERE blaat = $parameter";
}
if($secondParameter != '') {
$whereClause .= "AND ja = $secondParameter";
}
$whereClause = "WHERE blaat = $parameter";
}
if($secondParameter != '') {
$whereClause .= "AND ja = $secondParameter";
}
Die $whereClause kan je in je query zetten.
Gewijzigd op 19/05/2016 10:43:19 door Randy vsf
Randy vsf op 19/05/2016 10:41:37:
Je kan je query dynamisch maken. Neem aan dat je het in een functie hebt met parameters?
Dan doe je zoiets:
bedankt voor het mee denken alleen word dit hem ook niet want zo zoekt die nog alleen op beide. of ik moet wat verkeerd doen
Die $whereClause kan je in je query zetten.
Dan doe je zoiets:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
if($parameter != '') {
$whereClause = "WHERE blaat = $parameter";
}
if($secondParameter != '') {
$whereClause .= "AND ja = $secondParameter";
}
$whereClause = "WHERE blaat = $parameter";
}
if($secondParameter != '') {
$whereClause .= "AND ja = $secondParameter";
}
bedankt voor het mee denken alleen word dit hem ook niet want zo zoekt die nog alleen op beide. of ik moet wat verkeerd doen
Die $whereClause kan je in je query zetten.
Kan je laten zien wat je geprobeerd hebt? Dat stukje code wat ik gaf is maar een voorbeeld en kan je zo uitgebreid maken als je wilt.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?
if ($proxy != '') {
$whereclause = "WHERE a.proxy_id = $proxy ";
}
if ($sub_category != '') {
$whereclause = " WHERE a.category_id = $sub_category";
}
else {
$whereclause = "WHERE a.proxy_id = $proxy AND a.category_id = $sub_category";
}
$query ="SELECT a.id, a.rslogin, a.rswachtwoord, a.gebruikersnaam, p.proxy, c.subcategory
FROM bots a
INNER JOIN proxy p ON a.proxy_id=p.id
INNER JOIN subcategory c ON a.category_id=c.subcat_id
$whereclause ";
$stmt = $con->prepare($query);
$stmt->execute();
?>
if ($proxy != '') {
$whereclause = "WHERE a.proxy_id = $proxy ";
}
if ($sub_category != '') {
$whereclause = " WHERE a.category_id = $sub_category";
}
else {
$whereclause = "WHERE a.proxy_id = $proxy AND a.category_id = $sub_category";
}
$query ="SELECT a.id, a.rslogin, a.rswachtwoord, a.gebruikersnaam, p.proxy, c.subcategory
FROM bots a
INNER JOIN proxy p ON a.proxy_id=p.id
INNER JOIN subcategory c ON a.category_id=c.subcat_id
$whereclause ";
$stmt = $con->prepare($query);
$stmt->execute();
?>
Hij zoekt nu alleen op categorie en als ik op proxy of category en proxy zoek krijg ik 0 results