beste manier relatie's

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jaap evidor

Jaap evidor

25/04/2016 13:46:33
Quote Anchor link
Hey allemaal,

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
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
 
PHP hulp

PHP hulp

30/04/2024 03:32:29
 
Daan Slagter

Daan Slagter

25/04/2016 23:55:46
Quote Anchor link
Ik zou in de account tabel een veld proxy_id toevoegen omdat elk account toch maar 1 proxy kan hebben.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

26/04/2016 00:57:41
Quote Anchor link
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.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT a.gebruikersnaam, p.provider FROM accounts a JOIN proxy p ON a.proxy_id=p.id


leesvoer
 
Thomas van den Heuvel

Thomas van den Heuvel

27/04/2016 15:26:43
Quote Anchor link
Hierbij is het wellicht belangrijk om aan te tekenen dat dit een INNER JOIN betreft, en de volgorde van welke tabel je aan welke andere tabel hangt bepalend is voor welke join je zou moeten gebruiken.

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.
 
Jaap evidor

Jaap evidor

17/05/2016 20:23:39
Quote Anchor link
Hey allemaal bedankt voor de reactie's,


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

Frank Nietbelangrijk

17/05/2016 22:26:09
Quote Anchor link
Zoiets?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
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 OR category_id = $sub_category
 
Jaap evidor

Jaap evidor

18/05/2016 00:08:19
Quote Anchor link
Frank Nietbelangrijk op 17/05/2016 22:26:09:
Zoiets?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
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 OR category_id = $sub_category

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
 
Frank Nietbelangrijk

Frank Nietbelangrijk

18/05/2016 00:11:22
Quote Anchor link
verander OR in AND
 
Jaap evidor

Jaap evidor

18/05/2016 00:39:33
Quote Anchor link
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?
 
Jaap evidor

Jaap evidor

19/05/2016 07:45:16
Quote Anchor link
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
 
Randy vsf

Randy vsf

19/05/2016 10:41:37
Quote Anchor link
Je kan je query dynamisch maken. Neem aan dat je het in een functie hebt met parameters?
Dan doe je zoiets:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
if($parameter != '') {
    $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
 
Jaap evidor

Jaap evidor

20/05/2016 02:02:14
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
if($parameter != '') {
    $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.
 
Randy vsf

Randy vsf

20/05/2016 10:58:03
Quote Anchor link
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.
 
Jaap evidor

Jaap evidor

20/05/2016 16:46:02
Quote Anchor link
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
<?

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
 



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.