Data uitlezen database

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Yoeri Achterbergen

Yoeri Achterbergen

13/11/2019 00:09:47
Quote Anchor link
Goede avond,

Ik zou graag willen weten hoe ik tabellen kan combineren en het uitlezen hiervan.
In mijn database zitten de tabellen posts en users

Tabel posts heeft kolommen id, user, post en datum.
voorbeeld: 22, 45, Hier is mijn post, 2019-11-10

Tabel users heeft kolommen id, name en email.
Voorbeeld 45, jan, [email protected]

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
$date
= "2019-11-10";
$data = mysqli_query($connection, "SELECT user FROM posts WHERE orderdate='$date'");

while($row = mysqli_fetch_array($data)){
    echo $row["user"];
}

?>


De output is dan 45.
Als ik nu de gekoppelde naam wil hebben uit users hoe kan ik dat als resultaat krijgen?
 
PHP hulp

PHP hulp

29/03/2024 16:49:10
 
- Ariën  -
Beheerder

- Ariën -

13/11/2019 00:48:31
Quote Anchor link
Verdiep je eens in de wereld van JOINS.

https://www.w3schools.com/sql/sql_join.asp
Een INNER JOIN zal je er wel bij helpen.
Gewijzigd op 13/11/2019 00:50:16 door - Ariën -
 
Bart V B

Bart V B

13/11/2019 10:51:12
Quote Anchor link
Volgens mij moet dat zoiets gaan worden dan van uitgaande dat posts.user een nummer is.

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
$date
= "2019-11-10";
$data = mysqli_query($connection, "SELECT users.name AS user,
                                          posts.post AS post
                                          FROM posts
                                          INNER JOIN ON user.id = posts.user
                                          WHERE
                                          posts.orderdate ='"
.$date."'
                                   "
);

while($row = mysqli_fetch_array($data)){
    echo $row['user'].' has posted '. $row['post'].'<br />';
}

?>
 
Thomas van den Heuvel

Thomas van den Heuvel

13/11/2019 16:45:43
Quote Anchor link
En als je dan toch bezig bent, kijk dan ook even naar indexen (op orderdate bijvoorbeeld) en relaties tussen tabellen (een foreign key op posts.user). Dit laatste is alleen mogelijk als je de InnoDB engine gebruikt.

Ik hoop voor jou dat je dat ook in je ontwerp hebt meegenomen, anders is de kans groot dat op den duur je queries steeds trager worden wanneer deze tabellen groeien.
 
Bart V B

Bart V B

13/11/2019 18:27:17
Quote Anchor link
Toegeven, ben echt een al heel lang niet meer bezig geweest met databasen dus disclaimer als ik me niet helemaal juist uitdruk:

Volgens mij ga je pas een database optimaliseren als je een probleem hebt. Niet omdat je denkt een probleem te gaan verwachten. Als je een probleem hebt, dan pas ga je aan indexen denken. Dan nog zal je moeten weten wat er onderwater gebeurd en dat doe je door een EXPLAIN te zetten in je query. Dan nog, moet je eerst kijken waar dat die query blijft hangen. Dus zomaar lukraak roepen in dit geval om het op orderdate lijkt me dat geen goed plan.
Een datum kan aangepast worden met een update of insert dus zou het niet logisch zijn om dan op de datum een index te zetten. Waar moet je het dan wel doen? Dat kan je pas zeggen als je de uitkomst weet van je explain. ;)
 
Thomas van den Heuvel

Thomas van den Heuvel

13/11/2019 19:26:31
Quote Anchor link
Dus jij laat het toilet liever overlopen dan dat je zorgt dat je spoelbak en afvoer goed werkt? Ieder zijn hobby I guess.

Zoals ik het zie optimaliseer je je tabellen op grond van de manier waarop je de data gebruikt. De database staat per slot van rekening in dienst van de applicatie. Blijkbaar is orderdate een argument voor sorteren/filteren in ten minste één query. Dus het kan zeker geen kwaad om daar een index op te zetten. Nu merk je nog weinig van performance issues, maar als beide tabellen beginnen te groeien kan dit snel achteruit hollen. En je wéét dat dit gaat gebeuren, dus waarom zou je dit dan niet meteen regelen? Dit kost geen enkele moeite.

Ik denk niet dat het "piepsysteem" *1 (in dit geval) een valide ontwikkelstrategie is, tenzij je wellicht inkomsten uit onderhoud genereert ofzo. Maar je zou dit ook kunnen beschouwen als bochten afsnijden in het ontwerp, die je later keihard weer op je bord terugkrijgt, mogelijk als je al met andere dingen bezig bent... Ain't nobody got time for that.

Dus tenzij je geen reet geeft om de technical debt die je hier genereert (je collega's zullen je hier ook dankbaar voor zijn) zou ik dit toch anders aanpakken...

Databases vormen vaak het fundament van een applicatie. Hier mag dus best veel tijd en denkwerk ingestoken worden. Als het fundament al krakkemikkig is dan hoef je van de rest ook niet veel te verwachten.

*1 piepsysteem = pas ingrijpen op het moment dat er problemen geconstateerd worden
Gewijzigd op 13/11/2019 19:35:24 door Thomas van den Heuvel
 
Bart V B

Bart V B

13/11/2019 20:56:38
Quote Anchor link
Nope. First of all, ik ben de TS niet he. Heb alleen een voorzetje gegeven hoe TS zijn data uit de database kan poepen om maar in de geest van jou eerste alinea te blijven. :)

Ik zeg nergens dat je je systeem niet vanaf 0 heel slim in moet richten.
Dat je eerst een test maakt met big dummy data lijkt me een zeer voor de hand liggend, althans zo heb ik het altijd wel gedaan. Dan pas kan je testen of alles naar behoren werkt alvorens je live gaat met je applicatie.
Als je dan tegen dit soort problemen aanloopt, dan kan je met explain die query's slimmer maken met indexen.

Dus ik denk dat wij het zelfde bedoelen alleen het anders benaderen/uitleggen.
 



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.