PHP en MYSQL SELECT
Hoi allemaal
Momenteel ben ik aan een script bezig (zie hieronder). Ik ben een beginner en heb vaak problemen met het uitschrijven van de codes, vooral bij meerdere SELECTs.
Met dit script wil ik de totale score berekenen van thumb_value (ofwel +1 ofwel -1). Deze score is voor elke post apart. In het tweede deel wou ik de informatie van de persoon die heeft gepost, weergeven.
Wanneer ik dit echter toepas, krijg ik volgende error:
mysqli_error() expects parameter 1 to be mysqli, boolean given
Alvast bedankt!
Graag volgende keren alle codes tussen de code-tags zetten. (of tussen de php-tags)[/modedit]
Momenteel ben ik aan een script bezig (zie hieronder). Ik ben een beginner en heb vaak problemen met het uitschrijven van de codes, vooral bij meerdere SELECTs.
Code (php)
1
2
3
2
3
<?php
$sql = "SELECT (SELECT SUM (thumb_value) AS total FROM love_it INNER JOIN posts ON post_id), SELECT * FROM posts, user WHERE posts.email=user.email ORDER BY posts.post_id DESC LIMIT 0,80";
?>
$sql = "SELECT (SELECT SUM (thumb_value) AS total FROM love_it INNER JOIN posts ON post_id), SELECT * FROM posts, user WHERE posts.email=user.email ORDER BY posts.post_id DESC LIMIT 0,80";
?>
Met dit script wil ik de totale score berekenen van thumb_value (ofwel +1 ofwel -1). Deze score is voor elke post apart. In het tweede deel wou ik de informatie van de persoon die heeft gepost, weergeven.
Wanneer ik dit echter toepas, krijg ik volgende error:
mysqli_error() expects parameter 1 to be mysqli, boolean given
Alvast bedankt!
Graag volgende keren alle codes tussen de code-tags zetten. (of tussen de php-tags)[/modedit]
Gewijzigd op 05/11/2013 20:46:13 door Nick Dijkstra
Ik heb zo maar het gevoel dat je probleem niet in de code zit welke je hierboven geplaatst hebt.
Bedankt voor de reactie. Voordien had ik enkel het tweede deel van de code. Die werkte immers wel. Zou het iets te maken kunnen hebben met het soort JOIN dat gehanteerd wordt?
Ik zie alleen de query, de fout komt uit de uitvoering van de query waar verkeerde parameters worden gebruikt.
Aangezien de code van de uitvoering van de query niet gegeven is zal niemand hier verder iets over kunnen zeggen.
Aangezien de code van de uitvoering van de query niet gegeven is zal niemand hier verder iets over kunnen zeggen.
Dit is de volledige code die ik gebruik (behalve database namen). Hierboven had ik posts in de plaats gezet van bloopp, omdat dit misschien verwarring zou kunnen brengen. Een replace heb ik eruit gelaten, anders zou dit een te lange code worden, maar deze werkte voordien ook.
Graag volgende keren alle codes tussen de code]-tags zetten. (of tussen de php-tags)[/modedit]
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
$link = mysqli_connect($db_hostname, $db_username, $db_password, $db_database) or die("Error " . mysqli_error($link));
$sql="SELECT (SELECT SUM (thumb_value) AS total FROM love_it INNER JOIN bloopp ON bloopp_id), SELECT * FROM bloopp, user WHERE bloopp.email=user.email ORDER BY bloopp.bloopp_id DESC LIMIT 0,80";
$result = mysqli_query($link, $sql) or die("Error " . mysqli_error($result));
while($row = mysqli_fetch_array($result))
{
$user_id = $row['user_id'];
$first_name = $row['first_name'];
$last_name = $row['last_name'];
$bloopp_id = $row['bloopp_id'];
$bloopp = $row['bloopp'];
$send_time = $row['send_time'];
$email_friend = $row['email'];
$total = $row['total'];
echo "<div class='nametext' style='display:inline'>$first_name $last_name</div> <div class='note' style='display:inline'>$send_time</div><div class='text'>$bloopp</div><form action='loveform.php' method='post'><button class='lovebutton' name='bloopp_id' value='" . $bloopp_id . "'><input type='hidden' name='thumb_value' value='1'><img src='/images/thumb_up.png' style='width:20; height: 20;'/> Like-it</button> <button class='lovebutton' name='bloopp_id' value='" . $bloopp_id . "'><input type='hidden' name='thumb_value' value='-1'><img src='/images/thumb_down.png' style='width:20; height: 20;'/> Dislike-it</button></form>$total<br>";
}
?>
$link = mysqli_connect($db_hostname, $db_username, $db_password, $db_database) or die("Error " . mysqli_error($link));
$sql="SELECT (SELECT SUM (thumb_value) AS total FROM love_it INNER JOIN bloopp ON bloopp_id), SELECT * FROM bloopp, user WHERE bloopp.email=user.email ORDER BY bloopp.bloopp_id DESC LIMIT 0,80";
$result = mysqli_query($link, $sql) or die("Error " . mysqli_error($result));
while($row = mysqli_fetch_array($result))
{
$user_id = $row['user_id'];
$first_name = $row['first_name'];
$last_name = $row['last_name'];
$bloopp_id = $row['bloopp_id'];
$bloopp = $row['bloopp'];
$send_time = $row['send_time'];
$email_friend = $row['email'];
$total = $row['total'];
echo "<div class='nametext' style='display:inline'>$first_name $last_name</div> <div class='note' style='display:inline'>$send_time</div><div class='text'>$bloopp</div><form action='loveform.php' method='post'><button class='lovebutton' name='bloopp_id' value='" . $bloopp_id . "'><input type='hidden' name='thumb_value' value='1'><img src='/images/thumb_up.png' style='width:20; height: 20;'/> Like-it</button> <button class='lovebutton' name='bloopp_id' value='" . $bloopp_id . "'><input type='hidden' name='thumb_value' value='-1'><img src='/images/thumb_down.png' style='width:20; height: 20;'/> Dislike-it</button></form>$total<br>";
}
?>
Graag volgende keren alle codes tussen de code]-tags zetten. (of tussen de php-tags)[/modedit]
Gewijzigd op 05/11/2013 20:46:00 door Nick Dijkstra
Pipo Clown op 05/11/2013 20:07:46:
Aangezien de code van de uitvoering van de query niet gegeven is zal niemand hier verder iets over kunnen zeggen.
Het tegendeel is waar. Door de sql fout gaat de query fout en dus is er geen resource waar php de resultaten uit kan halen.
En de sql fout:
SELECT (bla bla), SELECT * FROM
zo'n dubbele select bestaat niet in SQL.
Bedankt voor het bekijken van mijn vraag. Weet U hoe ik dit kan oplossen?
Laten we je vraag eens anders stellen:
Welke gegevens wil je nu uit de database halen?
dus welke records van welke tabel (of tabellen) en aan welke voorwaarden moeten die records voldoen?
Welke gegevens wil je nu uit de database halen?
dus welke records van welke tabel (of tabellen) en aan welke voorwaarden moeten die records voldoen?
Ik zou graag volgende gegevens uit de database halen:
Table user:
Table bloopp:
Table love_it:
Table user en bloopp hebben gemeenschappelijk en bloopp en love_it .
Bedankt!
Table user:
Code (php)
1
2
3
4
5
2
3
4
5
$user_id = $row['user_id'];
$first_name = $row['first_name'];
$last_name = $row['last_name'];
$email = $row['email'];
$first_name = $row['first_name'];
$last_name = $row['last_name'];
$email = $row['email'];
Table bloopp:
Code (php)
1
2
3
4
5
2
3
4
5
$bloopp_id = $row['bloopp_id'];
$bloopp = $row['bloopp'];
$send_time = $row['send_time'];
$email= $row['email'];
$bloopp = $row['bloopp'];
$send_time = $row['send_time'];
$email= $row['email'];
Table love_it:
Table user en bloopp hebben gemeenschappelijk en bloopp en love_it .
Bedankt!
mysqli_error($result) moet zijn: mysqli_error($link)
Oké, bedankt! :)
Begin met het ophalen van de user(s), join de bloopp tabel en dan join de love_it tabel. Dan krijg je dit:
Door het gebruik van een LEFT JOIN krijg je altijd de user te zien, zelfs als er geen overeenkomstig record te vinden is in de bloopp en/of love_it tabel. Als je een INNER JOIN gebruikt dan krijg je alleen de users die ook records hebben in de andere tabellen. Aan jou om te bepalen welke nodig zijn.
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
SELECT
a.user_id, a.first_name, a.last_name, a.email,
b.bloopp_id, b.bloopp, b.send_time,
SUM(c.thumb_value) AS total
FROM user a
LEFT JOIN bloopp b ON a.email = b.email
LEFT JOIN love_it c ON b.bloopp_id = c.bloopp_id
GROUP BY
a.user_id, a.first_name, a.last_name, a.email,
b.bloopp_id, b.bloopp, b.send_time
a.user_id, a.first_name, a.last_name, a.email,
b.bloopp_id, b.bloopp, b.send_time,
SUM(c.thumb_value) AS total
FROM user a
LEFT JOIN bloopp b ON a.email = b.email
LEFT JOIN love_it c ON b.bloopp_id = c.bloopp_id
GROUP BY
a.user_id, a.first_name, a.last_name, a.email,
b.bloopp_id, b.bloopp, b.send_time
Door het gebruik van een LEFT JOIN krijg je altijd de user te zien, zelfs als er geen overeenkomstig record te vinden is in de bloopp en/of love_it tabel. Als je een INNER JOIN gebruikt dan krijg je alleen de users die ook records hebben in de andere tabellen. Aan jou om te bepalen welke nodig zijn.
Beste Erwin
Het is ongelooflijk! Ik weet niet hoe ik U moet bedanken, maar het werkt perfect! Ik had er nooit op kunnen komen om dit te kunnen schrijven. Het is exact hoe ik het voor ogen had!
Ik ben U erg dankbaar!
Met vriendelijke groeten
Sven
Het is ongelooflijk! Ik weet niet hoe ik U moet bedanken, maar het werkt perfect! Ik had er nooit op kunnen komen om dit te kunnen schrijven. Het is exact hoe ik het voor ogen had!
Ik ben U erg dankbaar!
Met vriendelijke groeten
Sven




