Autor | Zpráva | ||
---|---|---|---|
Radovan789 Profil * |
#1 · Zasláno: 26. 8. 2014, 16:57:43
Ahoj, mám dvě tabulky games a cat_connect... cat_connect má sloupce id_game a id_cat. Chci vypsat všechny hry kromě těch které mají přiřazené id_cat=4 a id_cat=5. Mám tento dotaz:
SELECT games.* FROM blabla_games as games LEFT JOIN blabla_cat_connect as cats ON cats.id_game=games.id WHERE cats.id_cat!=4 AND cats.id_cat!=5 Vše funguje skvěle až na takový detail, že když má hra více přiřazených kategorií (více řádku v tabulce cat_connect se stejným id_game) vypíše se mi více stejných her, potřeboval bych to omezit pouze na jednu. Neví někdo jak by tohle šlo vyřešit? Už sem nad tím strávil dost času. Předem děkuji. |
||
mimochodec Profil |
#2 · Zasláno: 26. 8. 2014, 17:04:42
... GROUP BY games.id |
||
Radovan789 Profil * |
#3 · Zasláno: 26. 8. 2014, 17:08:42
Děkuju:) já si myslel že to bude nějaká blbost:D
|
||
Tori Profil |
#4 · Zasláno: 26. 8. 2014, 17:09:58
Radovan789:
„Chci vypsat všechny hry kromě těch které mají přiřazené id_cat=4 a id_cat=5“ Pak tam musí být INNER JOIN místo LEFT JOIN. |
||
Radovan789 Profil * |
#5 · Zasláno: 26. 8. 2014, 19:43:47
Tori:
Díky za připomínku. Ještě bych měl dotaz jak potom můžu počítat celkový počet výsledků přes COUNT, přece jenom to GROUP BY mě to trochu kazí. |
||
Tori Profil |
Možná
SELECT games.*, SUM(COUNT(cats.id)) AS celkem ... ? Což bude totéž jako když zavoláte funkci ekvivalentní mysql_num_rows (= pokud používáte stránkování, tak zjistí jen počet výsledků na aktuální stránce). Anebo celkový počet záznamů samostatným dotazem SELECT COUNT(*) FROM cats (pokud je sloupec id_game indexovaný, tak se dotaz provede velmi rychle).
|
||
Radovan789 Profil * |
#7 · Zasláno: 26. 8. 2014, 21:30:39
No když použiji (nebo cats.id_game misto games.id):
SELECT SUM(COUNT(games.id)) FROM ... tak mě to vyhodí: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]: General error: 1111 Invalid use of group function |
||
Tori Profil |
#8 · Zasláno: 27. 8. 2014, 00:24:40
Radovan789:
Aha, tak potom z hlavy nevím, snad někdo lepší poradí. Zatím můžete použít ten druhý dotaz anebo $pdoStatement->rowCount() (podle toho, jestli máte stránkování nebo ne).
|
||
Radovan789 Profil * |
#9 · Zasláno: 27. 8. 2014, 03:54:32 · Upravil/a: Radovan789
Tori:
Stránkování používám proto chci použít COUNT s jedním dotazem (queryOne) abych nemusel načítat všechny výsledky z databáze a našel jsem řešení podle angického fóra, které vypadá takhle: SELECT COUNT(*) as total FROM (SELECT COUNT(*) FROM blabla_games as games LEFT JOIN blabla_cat_connect as cats ON cats.id_game=games.id WHERE cats.id_cat!=4 AND cats.id_cat!=5) as row_count respektive: SELECT COUNT(*) as total FROM (SELECT COUNT(*) FROM blabla_games as games INNER JOIN blabla_cat_connect as cats ON cats.id_game=games.id WHERE cats.id_cat!=4 AND cats.id_cat!=5 GROUP BY games.id) as row_count |
||
Kajman Profil |
#10 · Zasláno: 28. 8. 2014, 08:20:25
Původní dotaz lze přepsat na verzi bez group by.
SELECT games.* FROM blabla_games AS games LEFT JOIN blabla_cat_connect AS cats ON cats.id_game = games.id AND cats.id_cat IN ( 4, 5 ) WHERE cats.id_game IS NULL |
||
Časová prodleva: 10 let
|
0