Ich habe zwei Tabellen wie folgt aus:Wie kann ich "true" zurückgeben, wenn die Bedingung der where-Klausel falsch ist?
// Posts
+----+---------+-----------------+----------+
| id | title | content | amount |
+----+---------+-----------------+----------+
| 1 | title1 | content1 | NULL |
| 2 | title2 | content2 | 1000 |
| 3 | title3 | content3 | 5000 |
| 4 | title4 | content4 | NULL |
| 5 | title5 | content5 | 2000 |
+----+---------+-----------------+----------+
// ^NULL means that question is free
// Money_Paid
+----+---------+---------+
| id | user_id | post_id |
+----+---------+---------+
| 1 | 123 | 2 |
| 2 | 345 | 5 |
| 3 | 123 | 5 |
+----+---------+---------+
Alles, was ich versuche zu tun: Einige meiner Beiträge nicht frei sind und jeder will, dass sie ihre Kosten bezahlen sehen sollten. Jetzt brauche ich eine Abfrage, um zu überprüfen, ob der aktuelle Benutzer die Kosten für diesen Beitrag bezahlt hat oder nicht? (nur für unfreie Post)
select *,
(select count(1) from Money_paid mp where p.amount is not null and mp.post_id = p.id and mp.user_id = :user_id) paid
from Posts p
where p.id = :post_id
Hier ist ein paar Beispiele: (basierend auf aktuellen Tabellen)
$stm->bindValue(":post_id", 2, PDO::PARAM_INT);
$stm->bindValue(":user_id", 123, PDO::PARAM_INT);
// paid column => 1 (the user of '123' can see this post because he paid post's cost)
$stm->bindValue(":post_id", 2, PDO::PARAM_INT);
$stm->bindValue(":user_id", 345, PDO::PARAM_INT);
// paid column => 0 (the user of '345' cannot see this post because he didn't pay post's cost)
$stm->bindValue(":post_id", 5, PDO::PARAM_INT);
$stm->bindValue(":user_id", 345, PDO::PARAM_INT);
// paid column => 1
Was ist mein Problem ? Die Ausgabe meiner Abfrage ist 0
, wenn der Beitrag frei ist. (Ich brauche 1
, wenn Beitrag frei ist).
Wieder. Ich brauche 1
für beide kostenlose Beiträge und bezahlte Benutzer, und 0
für unbezahlte Benutzer. Zum einfachen Umgang mit PHP wie dieser
if ($result['paid'] == 1) {
// show it
} elas {
// doesn't show it
}
Wie kann ich es beheben?
Einfach nur neugierig, warum Sie benötigen drei Ausgänge - warum nicht nur abgefragt werden, ob der Benutzer den Beitrag sehen können oder nicht, ob frei oder sie bezahlt? – AbraCadaver
@AbraCadaver Sie haben Recht. Aber meine Abfrage gibt '0' sowohl für unbezahlte Benutzer als auch für freie Posts zurück. Ich brauche es "1" für freie Beiträge zurück. Wie kann ich das machen? Um es einfach in PHP zu behandeln: 'if ($ result ['paid'] == 1) {// zeige es} else {// zeige es nicht}' – stack
Ich habe meine Frage bearbeitet. – stack