MySQL count hiba
Szevasztok Srácok!
Találtam egy hibát és nem értem, hogy mitől lehet. Kérlek, segítsetek rajtam!
Adott 5 tábla, melyek a következő lekérdezéssel vannak összekapcsolva:A probléma az, hogy a két COUNT oszlop hibás értékeket ad random módon. Van, amikor helyes az érték, van amikor duplája annak, aminek kellene lennie.
Akkor változik, ha beszúrok egy-egy sort a kommentek, vagy a like táblába.
Nem értem, hogy miért. Ha valaki tudna segíteni, azt megköszönném!
Ha nagyon nem érthető így, akkor adok DB elérést.
Köszönöm előre is!
Ábel
■ Találtam egy hibát és nem értem, hogy mitől lehet. Kérlek, segítsetek rajtam!
Adott 5 tábla, melyek a következő lekérdezéssel vannak összekapcsolva:
SELECT hsps_wall.wall_id, hsps_users.users_vezeteknev, hsps_users.users_keresztnev, hsps_users.users_nick, hsps_wall.wall_text, COUNT(hsps_wall_comments.wall_comments_id) AS wall_comment, COUNT(hsps_wall_like.wall_like_id) AS wall_like, hsps_wall.wall_created
FROM hsps_wall
RIGHT JOIN hsps_relations ON hsps_relations.relations_to = hsps_wall.wall_user
LEFT JOIN hsps_users ON hsps_users.users_id = hsps_wall.wall_user
LEFT JOIN hsps_wall_comments ON hsps_wall_comments.wall_comments_wall = hsps_wall.wall_id
LEFT JOIN hsps_wall_like ON hsps_wall_like.wall_like_wall = hsps_wall.wall_id
WHERE hsps_relations.relations_from = 1 OR hsps_wall.wall_user = 1
GROUP BY hsps_wall.wall_id
ORDER BY hsps_wall.wall_created DESC
LIMIT 30
Akkor változik, ha beszúrok egy-egy sort a kommentek, vagy a like táblába.
Nem értem, hogy miért. Ha valaki tudna segíteni, azt megköszönném!
Ha nagyon nem érthető így, akkor adok DB elérést.
Köszönöm előre is!
Ábel
Kódtisztítás
Nincs kedvem fejben matekozni, de ha adsz DB hozzáférést, szívesen megnézem. Ettől függetlenül számomra kicsit konfúznak tűnik az általad használt SQL. Miért használsz RIGHT JOIN-t? Mit szeretnél vele elérni? (Okosítson már ki valaki; nekem eddig még mindig elég volt a JOIN és a LEFT JOIN.)
Mi a célod azzal a GROUP-pal? Ha ID-ra GROUP-olsz, mi lesz a többi, nem kumulált mezőben? Ha azokban minden ID-ra mindig ugyanaz van, akkor szervezd máshogy az SQL szkriptet, vagy használj DISTINCT-et.
Üdv:
Dávid
DB hozzáférés
Köszönöm a választ! A DB elérése:
phpMyAdmin: http://bit.ly/d40OP1
felhasználó: teszt
jelszó: teszt
Beraktam a szóban forgó táblákat, kevés tartalommal. Kérlek, próbáld ki a lekérdezést, hogy lásd miről van szó.
Köszönöm!
Ábel
+1 kérdés
Köszi! Üdv:
Dávid
igen
A wall_like pedig a különböző üzenőfal bejegyzések "lájkolására" ("nekem ez tetszik") szolgál, akárcsak a Facebook-on.
Szeretném lekérni a saját és az isermőseim üzenőfal bejegyzéseit. Ehhez hozzá csatolni a felhasználók adatait, valamint megszámolni, hogy az adott bejegyzéshez hányan szóltak hozzá, illetve hány embernek tetszett.
relations tábla:
ID, ki jelölt be, kit, dátum, állapot (ha 3, akkor ismerősök, más esetben még csak jelölve van)
wall tábla:
ID, users tábla -> ID, szöveg, dátum
comments tábla:
ID, users tábla -> ID, wall tábla -> ID, szöveg, dátum, ip
like tábla:
ID, users tábla -> ID, wall tábla -> ID, dátum, ip
/A COUNT miatt GROUP-olom, mert egyébként nem adja vissza az összes üzenőfal bejegyzést/
Köszönöm a segítséget!
Ábel
Nem akarom bonyolítani, de
Ugyanígy: azt írod, hogy a saját és felebaráti kommenteket szeretnéd visszakapni, akkor viszont a lekérdezésben nem a wall_comments-ből kéne kiválasztani a comment-et a wall-beli text helyett?
(Nekem - természetesen - a count mindig ugyanannyit ad vissza; most éppen egy egyszerűbb lekérdezést szeretnék összehozni, csak mindig belefutok valamibe. :) )
Köszi a további infókat!
Dávid
:)
És még ezeket a bejegzéseket lehet kommentelni, illetve bejelölni, hogy tetszik.
Vagyis valahogy így:
TAMÁS: Szép idő van ma. (wall tábla)
-- Ez 2 embernek tetszik. (like tábla)
-- PISTI: Igen, itt is szép idő van.
-- PETI: Remélem, holnap is szép idő lesz. (ez a kettő a comment tábla)
PETI: Jó volt a tegnap este. (wall tábla)
-- Ez 5 embernek tetszik. (like tábla)
-- TOMI: Jól éreztem én is magam. (comment tábla)
No, köszi! :)
Üdv:
Dávid
:)
http://www27.zippyshare.com/v/45484791/file.html
http://www27.zippyshare.com/v/69763315/file.html
A lekérdezés ugyanaz. Az eredmény nem. :O
Az első a komplett adatbázis Mac-en, a másik az, amivel te is dolgoztál, Linuxon.
A világ X-edik csodája...
Bocs!
Most el kell rohannom, este még - ha érdekel - mintakódot is tudok küldeni, mert a JOIN-os lekérdezés előállítása közben jöttem rá, hogy az "egy GROUP két COUNT" dolog nem igazán kóser. Ugyanis - ha nem tévedek - mindkét COUNT a kétféle találati szám szorzatát fogja adni. Nézd meg COUNT helyett ID-kkal és GROUP nélkül!
Üdv:
Dávid
:)
Valószínűleg ott lesz a hiba, igazad van.
COUNT helyett IDkkal? Ebben segíts légyszíves!
Ábel
Mintakód
Szóval így fest a "mintakód":
Üdv:
Dávid
köszi :)
Van még egy érdekes kérdésem. Arra volna esetleg ötleted, hogy hogyan lehetne beletenni ebbe a lekérésbe még azt, hogy én rányomtam e már, hogy tetszik.
Sajnos nem használtam még IF-et SQL lekérésben, de valahogy így képzelem:
IF( (SELECT COUNT(*) FROM wall_like WHERE user = 1 AND wall = 1) > 0 THEN 1, 0) user_liked_this
Vagyis, ha a (számold meg, hogy tetszett e az 1-es bejegyzés) nagyobb, mint nulla, akkor a user_liked_this oszlopba 1 kerül, ha kisebb, akkor 0.
Ezt bele tudjuk még fűzni? :D
Ne haragudj, hogy ennyi idődet elveszem.
Nagyon szépen köszönöm tényleg, hogy segítessz! :)
Ábel
És mielőtt válaszolnál, már
Nagyon szépen köszönöm a segítségedet! Sokat segítettél!
Köszönöm mégegyszer! :)
Ábel
Nincs mit!
Üdv:
Dávid