Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18
  1. #1

    [Mysql]Ordinare per numero occorrenze

    Ho questa query
    codice:
    SELECT g.id AS g__id, g.producer_id AS g__producer_id, g.description AS g__description, g.name AS g__name, g.published AS g__published, g.cover AS g__cover, i.id AS i__id, i.path AS i__path, i.game_id AS i__game_id
    FROM games g
    LEFT JOIN images i ON g.id = i.game_id
    WHERE g.id != ? AND g.id IN (
      SELECT g2.game_id AS g2__game_id
      FROM games_tags g2 LEFT JOIN tags t ON g2.tag_id = t.id
      WHERE t.name IN (?, ?, ?)
    )
    La quesry funziona benissimo, però l'ordinamento non è corretto; ossia ordina i risultati in base all'id di `game`, mentre io vorrei li ordinasse in modo tale che quelli che hanno più tag in comune vengano prima. Mi potreste dare deluciadazioni?

  2. #2

  3. #3

  4. #4
    Non ho ben capito quale ordinamento vorresti

  5. #5
    in poche parole vorrei che i giochi con più tag in comune venissero prima di quelli con meno tag in comune... tipo
    gioco 1 ha tag1, tag2, tag3
    gioco 2 ha tag1, tag2, tag4
    gioco 3 ha tag1, tag2, tag3, tag4
    per esempio
    in questo caso verrebero mostrati in questo ordine, però a me dovrebbe mostrare
    gioco 1
    gioco 3
    gioco 2
    poichè il 3 ha più tag in comune del gioco 2
    spero di esser stato chiaro

  6. #6
    Ma in comune con cosa?

  7. #7
    t.name IN (?, ?, ?)

    questa stringa prende dei valori da un array di id, questo array deriva da una precedente select sulla tabella giochi.
    In poche parole questa query mi serve per elencare tutti i giochi che sono simili ad uno dato con una prima select.
    Un po' come su youtube quando vedi un video, che ti mostra i video simili(a grandi linee)

  8. #8
    Prova con:

    codice:
    SELECT g.id AS g__id, g.producer_id AS g__producer_id, g.description AS g__description, g.name AS g__name, g.published AS g__published, g.cover AS g__cover, i.id AS i__id, i.path AS i__path, i.game_id AS i__game_id
    FROM games g
    LEFT JOIN images i ON g.id = i.game_id
    WHERE g.id != ? AND g.id IN (
      SELECT g2.game_id AS g2__game_id
      FROM games_tags g2 LEFT JOIN tags t ON g2.tag_id = t.id
      WHERE t.name IN (?, ?, ?)
      GROUP BY g2.game_id
      ORDER BY COUNT(g2.game_id) DESC
    )

  9. #9
    l'idea è quella, però non me li ordina
    ho notato che sia che metto
    ORDER BY COUNT(g2.game_id) che lo ometto è la stessa cosa

    PS
    codice:
    SELECT g2.game_id AS g2__game_id
      FROM games_tags g2 LEFT JOIN tags t ON g2.tag_id = t.id
      WHERE t.name IN ('rpg', 'tattico', 'stupendo')
      GROUP BY g2.game_id
      ORDER BY COUNT(g2.tag_id) DESC
    se eseguo solo questa query l'ordine è giusto

  10. #10

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.