Hoe krijg ik een INNER JOIN echo correct op de pagina
Beide tabellen hebben een veld genaamd "id", maar nu wil ik dus van beide velden het id op de pagina laten tonen.
Welke manier kan ik het beste uitvoeren zonder dat ik de tabel aan moet passen?
P.s.: niet te vergeten dat ik heel veel zal moeten leren betreft MySQL querys.
Alvast bedankt!
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
$dataquery = mysqli_query($connect_mysql, "SELECT * FROM `users` INNER JOIN `user_settings` as us ON (users.id = us.user_id) WHERE `setting_id` = 'PROFPIC' ORDER BY users.id desc");
while($data = mysqli_fetch_array($dataquery))
{
// hier wil ik dus de info van user_settings -> id zien
// De query is nu natuurlijk niet correct.
// dit is sowieso niet goed:
$prof = $data['us.id'];
// Deze wordt ook niet geaccepteerd
$prof = $data->us->id;
print $prof;
}
?>
$dataquery = mysqli_query($connect_mysql, "SELECT * FROM `users` INNER JOIN `user_settings` as us ON (users.id = us.user_id) WHERE `setting_id` = 'PROFPIC' ORDER BY users.id desc");
while($data = mysqli_fetch_array($dataquery))
{
// hier wil ik dus de info van user_settings -> id zien
// De query is nu natuurlijk niet correct.
// dit is sowieso niet goed:
$prof = $data['us.id'];
// Deze wordt ook niet geaccepteerd
$prof = $data->us->id;
print $prof;
}
?>
Een aantal enters in je query maakt het geheel ook een stuk overzichtelijker.
Gewijzigd op 01/07/2020 21:10:03 door - Ariën -
- Ariën - op 01/07/2020 21:09:11:
...
Dus als ik het goed begrijp is het bijvoorbeeld:
Code (php)
1
SELECT `id`, `naam`, `achternaam` FROM `users` INNER JOIN `user_settings` ON (users.id = user_settings.user_id)
Maar hoe krijg ik dan van de user_settings de id te pakken?
user_settings.id in je SELECT.
- Ariën - op 01/07/2020 21:14:16:
..
Dus als ik het goed begrijp is het dan zo:
Dan ga ik morgen even kijken of het middels de alias werkt :-)
Code (php)
1
2
3
2
3
SELECT us.id AS settingID, bla, blah....
FROM users u
INNER JOIN user_settings us ON (users.id = user_settings.user_id)
FROM users u
INNER JOIN user_settings us ON (users.id = user_settings.user_id)
Scheelt je een hoop lange tabelnamen als je je lange tabelnamen hebt.
- Ariën - op 01/07/2020 23:24:40:
..
Ik krijg de volgende error:
Code (php)
1
Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in public_html/4-newsite/includes/newestusers.php on line 23
dit is hetgene wat ik hem uit laat voeren:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$dataquery = mysqli_query($connect_mysql, "
SELECT
users.id AS 'uid',
users.voornaam AS 'uv',
users.achternaam AS 'ua',
users.username AS 'uname',
us.value AS 'picture',
st.value AS 'top'
FROM `users`
INNER JOIN
`user_settings` as us ON (users.id = us.user_id) WHERE `setting_id` = 'PROFPIC'
INNER JOIN
`user_settings` as st ON (users.id = st.user_id) WHERE `setting_id` = 'PROFPIC_TOP'
ORDER BY users.id desc");
SELECT
users.id AS 'uid',
users.voornaam AS 'uv',
users.achternaam AS 'ua',
users.username AS 'uname',
us.value AS 'picture',
st.value AS 'top'
FROM `users`
INNER JOIN
`user_settings` as us ON (users.id = us.user_id) WHERE `setting_id` = 'PROFPIC'
INNER JOIN
`user_settings` as st ON (users.id = st.user_id) WHERE `setting_id` = 'PROFPIC_TOP'
ORDER BY users.id desc");
Vraag me af wat ik hier fout doe, als ik één INNER JOIN verwijder doet hij het wel.
Toevoeging op 03/07/2020 20:34:37:
Heb hem inmiddels gevonden, in plaats van WHERE moest ik AND gebruiken en ik moest st.setting_id gebruiken.
Als je die bovenste foutmelding ziet, dat betekent dat in feite dat je geen goede foutafhandeling hebt. ;-)
- Ariën - op 03/07/2020 21:15:40:
Als je die bovenste foutmelding ziet, dat betekent dat in feite dat je geen goede foutafhandeling hebt. ;-)
Mja, maar dit is het gevolg van een syntactisch incorrecte query. Het is dus niet zozeer het probleem dat de code / databaselaag geen foutafhandeling zou hebben. Indien de query wel zou kloppen -en deze is verder compleet statisch / heeft geen enkel dynamisch deel- dan zou het eigenlijk niet uitmaken of je een foutmeldingslaag hebt of niet.
Neemt niet weg dat het voor een productie-omgeving netter zou zijn dat je wat extra "stootkussens" hebt in de vorm van foutafhandeling, en dan bij voorkeur een variant waarbij de gebruiker een nette foutmeldingspagina krijgt indien er iets misgaat - wellicht met HTTP status code 500 (internal server error), in plaats van rauwe foutmeldingen op het scherm, die op een productie-omgeving eigenlijk altijd uit zouden moeten staan (de weergave, niet de registratie).
Ook is het belangrijk dat je de foutmeldingen echt leert lezen/interpreteren. Als je dit kunt ben je namelijk al halverwege met het oplossen van het achterliggende probleem.
Gewijzigd op 04/07/2020 20:59:28 door Thomas van den Heuvel