sql >> Database teknologi >  >> RDS >> Mysql

MySQL Brug for hjælp til at definere SQL for at fjerne uønskede rækker

DISTINCT virker på alle kolonner i SELECT, så har du VÆLG alt, vil det returnere hver enkelt række og ikke kun de forskellige indlæg. For at komme uden om dette kan du bare VÆLGE dataene fra posttabellen og derefter DISTINCERE dem, dvs.

SELECT DISTINCT posts.*

Men du har også sagt, at du gerne vil have indlæggene og katteoplysningerne, hvis det er muligt. En måde at gøre dette på og beholde en række pr. indlæg er at bruge GROUP_CONCAT så din forespørgsel kan ende med noget som dette.

SELECT 
   posts.*,
   GROUP_CONCAT(cats.id SEPARATOR ',') as catsList,
   GROUP_CONCAT(tags.id SEPARATOR ',') as tagsList
FROM posts
INNER JOIN termRelations ON ( posts.id = termRelations.postId )
LEFT JOIN cats ON ( termRelations.termId = cats.id AND termRelations.termTypeId = 1 AND cats.id =5 )
LEFT JOIN tags ON ( termRelations.termId = tags.id AND termRelations.termTypeId = 0 AND 
   (tags.id =2
   OR tags.id =1)
)
GROUP BY posts.id
LIMIT 0 , 30

Jeg har foretaget et par andre ændringer af din oprindelige forespørgsel, som f.eks. at ændre den første joinforbindelse til en INNER JOIN og tilføje katte-/tags-filtrene til JOIN-betingelserne for de relevante tabeller.

ps, når du siger, at du har separate tabeller til katte og tags for at fremskynde genereringen af ​​lister, kan du finde ud af, at en tabel, der er korrekt indekseret, ville være lige så hurtig og også ville forenkle din kode.




  1. MySQL:Opdater forespørgsel med If else

  2. Android - opdater klientens sqlite-database ved hjælp af GCM

  3. Indstilling af MySQL-konfigurationsvariabler – MySQL 5.7 vs MySQL 8.0

  4. Er der en måde at udfylde en MySQL 5.7-tabel med data fra en json-fil med linjeskift på Win7?