Inner Join mysqli
Code (php)
1
2
3
4
2
3
4
<?php
$berichten = mysqli_query($dbcreat,
"(SELECT * FROM `berichten_muur`) AS BB INNER JOIN (SELECT * FROM `vriendenlijst`) AS TT WHERE `BB.gebruikersnaam`='".mysqli_real_escape_string($dbcreat,$TT->naam_1)."' or `BB.gebruikersnaam`='".mysqli_real_escape_string($dbcreat,$TT->naam_2)."'") or die(mysqli_error($dbcreat));
?>
$berichten = mysqli_query($dbcreat,
"(SELECT * FROM `berichten_muur`) AS BB INNER JOIN (SELECT * FROM `vriendenlijst`) AS TT WHERE `BB.gebruikersnaam`='".mysqli_real_escape_string($dbcreat,$TT->naam_1)."' or `BB.gebruikersnaam`='".mysqli_real_escape_string($dbcreat,$TT->naam_2)."'") or die(mysqli_error($dbcreat));
?>
de error :
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AS BB INNER JOIN (SELECT * FROM `vriendenlijst`) AS TT WHERE `BB.gebruikersnaam`' at line 1
Ik heb nog nooit Cross join of inner join toegepast.
ik had gelezen dat je dan normaal als de rowl naam Gebruikersnaam is dat je dan AS BB.gebruikersnaam moet gebruiken? maar dit werkt niet.
mvg.
FROM tabel_a a
JOIN tabel_b b
ON a.id = b.a_id
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
if($data->login == $bericht_vriend->naam_1){
$gebruikersnaam2 = $bericht_vriend->naam_2;
}else{
$gebruikersnaam2 = $bericht_vriend->naam_1;
}
$berichten = mysqli_query($dbcreat,"
(SELECT * FROM `berichten_muur`) AS BB INNER JOIN
(SELECT * FROM `vriendenlijst`) AS TT WHERE `TT.naam_1=`'".mysqli_real_escape_string($dbcreat,$data->login)."' or
`TT.naam_2`='".mysqli_real_escape_string($dbcreat,$data->login)."'
AND `BB.gebruikersnaam`='".mysqli_real_escape_string($dbcreat,$gebruikersnaam2)."' AND `BB.pagina`='overzicht'") or mysqli_error($dbcreat);
?>
if($data->login == $bericht_vriend->naam_1){
$gebruikersnaam2 = $bericht_vriend->naam_2;
}else{
$gebruikersnaam2 = $bericht_vriend->naam_1;
}
$berichten = mysqli_query($dbcreat,"
(SELECT * FROM `berichten_muur`) AS BB INNER JOIN
(SELECT * FROM `vriendenlijst`) AS TT WHERE `TT.naam_1=`'".mysqli_real_escape_string($dbcreat,$data->login)."' or
`TT.naam_2`='".mysqli_real_escape_string($dbcreat,$data->login)."'
AND `BB.gebruikersnaam`='".mysqli_real_escape_string($dbcreat,$gebruikersnaam2)."' AND `BB.pagina`='overzicht'") or mysqli_error($dbcreat);
?>
Alleen ik krijg geen error van mysqli_error.
ik krijg error bij een while commando :
Warning: mysqli_fetch_object() expects parameter 1 to be mysqli_result, boolean given in /home/klant00324/domains/.nl/public_html/reactie.php on line 124
Gewijzigd op 10/03/2015 15:21:03 door Eeyk Vd noot
Je kunt een if (is_object($object)) toevoegen, maar zo te zien kun je het beste eerst je query verbeteren, want mysqli_query() eindigt in false in plaats van een mysqli_result.
(SELECT * FROM `berichten_muur`) AS BB INNER JOIN
(SELECT * FROM `vriendenlijst`) AS TT WHERE
`TT.naam_1=`'patric' or `TT.naam_2`='patric' AND
`BB.gebruikersnaam`='Jolanda'
AND `BB.pagina`='overzicht'
Het klopt allemaal maar toch krijg ik een error.
Warning: mysqli_fetch_object() expects parameter 1 to be mysqli_result, boolean given in /home/klant00324/domains/.nl/public_html/reactie.php on line 132
Ik vermoed van niet, alleen al omdat er een backtick ` verkeerd staat in:
`TT.naam_1=`'patric'
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AS BB INNER JOIN (SELECT * FROM `vriendenlijst`) AS TT WHERE `TT.naam_1`='patric' at line 1
geen haakjes gebruiken in het stuk voor AS BB en ook niet voor AS TT
Ik zou die backticks er tevens uitgooien.
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT * FROM `vriendenlijst` AS TT WHERE `TT.naam_1`='patric' or ' at line 2
ik loop al te google maar ik kom niet echt de zelfde problemen tegen.
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
$berichten = mysqli_query($dbcreat,"
SELECT * FROM `berichten_muur` AS BB INNER JOIN
SELECT * FROM `vriendenlijst` AS TT WHERE `TT.naam_1`='".mysqli_real_escape_string($dbcreat,$data->login)."' or
`TT.naam_2`='".mysqli_real_escape_string($dbcreat,$data->login)."'
AND `BB.gebruikersnaam`='".mysqli_real_escape_string($dbcreat,$gebruikersnaam2)."' AND `BB.pagina`='overzicht'") or die(mysqli_error($dbcreat));
?>
$berichten = mysqli_query($dbcreat,"
SELECT * FROM `berichten_muur` AS BB INNER JOIN
SELECT * FROM `vriendenlijst` AS TT WHERE `TT.naam_1`='".mysqli_real_escape_string($dbcreat,$data->login)."' or
`TT.naam_2`='".mysqli_real_escape_string($dbcreat,$data->login)."'
AND `BB.gebruikersnaam`='".mysqli_real_escape_string($dbcreat,$gebruikersnaam2)."' AND `BB.pagina`='overzicht'") or die(mysqli_error($dbcreat));
?>
of
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
$berichten = mysqli_query($dbcreat,"
SELECT * FROM berichten_muur AS BB INNER JOIN
SELECT * FROM vriendenlijst AS TT WHERE TT.naam_1='".mysqli_real_escape_string($dbcreat,$data->login)."' or
TT.naam_2='".mysqli_real_escape_string($dbcreat,$data->login)."'
AND BB.gebruikersnaam='".mysqli_real_escape_string($dbcreat,$gebruikersnaam2)."' AND BB.pagina='overzicht'") or die(mysqli_error($dbcreat));
?>
$berichten = mysqli_query($dbcreat,"
SELECT * FROM berichten_muur AS BB INNER JOIN
SELECT * FROM vriendenlijst AS TT WHERE TT.naam_1='".mysqli_real_escape_string($dbcreat,$data->login)."' or
TT.naam_2='".mysqli_real_escape_string($dbcreat,$data->login)."'
AND BB.gebruikersnaam='".mysqli_real_escape_string($dbcreat,$gebruikersnaam2)."' AND BB.pagina='overzicht'") or die(mysqli_error($dbcreat));
?>
blijf de zelfde fout houden.
Gewijzigd op 10/03/2015 15:44:12 door Eeyk Vd noot
zover ik weet hoort er na een JOIN een ON statement te komen. Ik twijfel nu wat je wilt. Hebben de twee tabellen een relatie met elkaar?
Wat probeer je hier nou te doen dan, dit is namelijk niet een query waar je echt een join bij nodig hebt, je legt namelijk geen relatie tussen de 2 tabellen hier. Gewoon een where volstaat hier met een select bb.*, tt.*
Code (php)
1
2
3
4
5
6
2
3
4
5
6
SELECT * FROM berichten_muur AS BB
INNER JOIN
(SELECT * FROM vriendenlijst AS TT
WHERE TT.naam_1='".mysqli_real_escape_string($dbcreat,$data->login)."'
OR TT.naam_2='".mysqli_real_escape_string($dbcreat,$data->login)."') AS TTT
ON BB.gebruikersnaam= TTT.naam_2 AND BB.pagina='overzicht'
INNER JOIN
(SELECT * FROM vriendenlijst AS TT
WHERE TT.naam_1='".mysqli_real_escape_string($dbcreat,$data->login)."'
OR TT.naam_2='".mysqli_real_escape_string($dbcreat,$data->login)."') AS TTT
ON BB.gebruikersnaam= TTT.naam_2 AND BB.pagina='overzicht'
edit:
ik heb 1 alias naar TTT veranderd.
Gewijzigd op 10/03/2015 16:04:33 door Ivo P
Thanks het werkt :D echt super bedankt ;D
Blijft een superslechte query en database-ontwerp, zou daar echt nog wat aan doen Eeyk
ik krijg maar 1 nieuw bericht als iemand anders uit me vriendenlijst een bericht plaats krijg je weer de zelfde naam onder elkaar.
alle gegevens blijven bij de eerste vriend? en niet vriend 2 en 3.
- users
- berichten
- fotos
in de tabel berichten neem je dan ook een kolom user_id op
in de tabel fotos neem je dan ook een tabel bericht_id op er van uitgaande dat je de foto's in de berichten wilt plaatsen.
door ivo p ben ik nu verder dan ooit maar nog steeds werkt het helaas niet.
Of is dit de tabel 'berichten'? in dat geval zou ik username vervangen voor user_id
Gewijzigd op 10/03/2015 16:33:36 door Frank Nietbelangrijk
als ze bevriend zijn met elkaar.
Het is gelukt! :D
ik moest While nog aanpassen naar $object
Gewijzigd op 10/03/2015 16:41:36 door Eeyk Vd noot