PHP en MYSQL SELECT
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?
Aangezien de code van de uitvoering van de query niet gegeven is zal niemand hier verder iets over kunnen zeggen.
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?
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?
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! :)
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.
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