2017-05-24 4 views
-2

Ich habe eine SQL, die den neuesten Beitrag aus allen verschiedenen Kategorien findet und sie aus Echo.Mysql Holen Sie sich die neuesten Beiträge aus Tabellen, aber überprüfen Sie, ob es versteckt versteckt

Aber es kann passieren, dass der neueste Beitrag aus dieser Kategorie eine Tabelle hidden mit einem Wert von 1 (statt 0 die sichtbar ist) genannt hat.

Ich möchte nicht, dass es anzuzeigen, aber finden Sie einen anderen Beitrag aus dieser Kategorie, die nicht versteckt ist.

SELECT m1.* 
FROM dbcontent m1 
LEFT JOIN dbcontent m2 ON (m1.category_name = m2.category_name AND m1.date_create < m2.date_create) 
WHERE m2.date_create IS NULL 
AND NOT m1.hidden > 0 
ORDER BY c_id ASC" 

Die SQL oben einfach ignoriert die ganze Kategorie, wenn sie als versteckt markiert ist, aber nicht überprüft, ob es aus dieser Kategorie eine andere ältere Beitrag ist, dass sie angezeigt werden kann, welche den Wert hidden = 0 hat.

+0

1.Do nicht-Format Sie SQL-Anweisung auf diese Weise setzen Sie den Code-Stil 2.Use enum stattdessen die 0/1, oder wenn Sie das 0/1 verwenden möchten Bit nicht verwenden int. 3. Und dieser Teil 'UND NICHT m1.hidden> 0' ergibt keinen Sinn. Sie sollten dies lesen ('MySql Cookbook Paul DuBois') Buch über mysql.Es ist eine gute Referenz von wo aus zu starten ... Viel Glück – DaAmidza

Antwort

1

Es sieht aus wie die Abfrage widersprüchliche Bedingungen hat, d. H. m1.date_create < m2.date_create und m2.date_create IS NULL, diese beiden werden nicht gleichzeitig wahr sein.

Wenn Sie die neueste nicht versteckt Artikel pro Kategorie erhalten möchten, dann können Sie eine Sub-Abfrage wie die unten ein verwenden (Sie brauchen nicht einmal eine JOIN):

SELECT * 
FROM dbcontent 
WHERE post_id in (
SELECT post_id, category_name, MAX(date_create) 
FROM dbcontent 
WHERE hidden = 0 
GROUP BY post_id, category_name 
); 
Verwandte Themen