הוסטס - פורום אחסון האתרים הגדול בישראל

הוסטס - פורום אחסון האתרים הגדול בישראל (https://hosts.co.il/forums/index.php)
-   פורום תיכנות (https://hosts.co.il/forums/forumdisplay.php?f=14)
-   -   [MySQL] שגיאה ב Group.. (https://hosts.co.il/forums/showthread.php?t=68653)

O-B 22-10-08 19:04

[MySQL] שגיאה ב Group..
 
אז ככה..

תכנתתי ללקוח מערכת כלשהי על המחשב שלי הכל עבד טוב ויפה..
ועכשיו אחרי התקנה של המערכת אצלו בשרת מופיעה השגיאה הבאה:

קוד:

1111: Invalid use of group function
השאילת שאני משתמש בא ב group היא:

קוד:

select `downloads`.`id`,`downloads`.`name`,avg(`ranks`.`rank`) as `rank` from `downloads` left join `ranks` on `ranks`.`download`=`downloads`.`id` group by `downloads`.`id` order by avg(`ranks`.`rank`) desc limit 4
עזרה בבקשה..

עריכה: עוד שאלה..
האם השגיאה:

קוד:

1203: User ***** has already more than 'max_user_connections' active connections
נובעת מאי שימוש בפונקציה mysql_close()? (אם לא אז ממה?)
כי הבנתי שהחיבור למסד נסגר אוטומטית בסיום הטעינה.

pirsomet 23-10-08 05:47

ציטוט:

נכתב במקור על ידי O-B (פרסם 675758)
עריכה: עוד שאלה..
האם השגיאה:

קוד:

1203: User ***** has already more than 'max_user_connections' active connections
נובעת מאי שימוש בפונקציה mysql_close()? (אם לא אז ממה?)
כי הבנתי שהחיבור למסד נסגר אוטומטית בסיום הטעינה.

בעיקרון החיבור צריך להסגר אוטומטית אבל, עד כמה שאני יודעה, מסיבות שונות לפעמים זה לא קורה.
אולי הבעיה היא בזה שאתה לא עושה ניתוק ממסד נתונים ואולי גם לא. אי אפשר להגיד כאן בוודאות.

תנסה לברר אצל חברת אחסון\מנהל השרת מה הן ההגבלות של מספר החיבורים למסד נתונים.

חוץ מזה, אם אין לך שימוש בTRANSACTIONS וLOCKS, אתה יכול להשתמש בפונקציה mysql_pconnect בזמן החיבור במקום mysql_connect. זה יפתח חיבור אחד קבוע והמערכת שלך תשתמש בחיבור זה בלי לפתוח חיבורים נוספים.
http://il2.php.net/mysql_pconnect

O-B 23-10-08 13:56

ציטוט:

נכתב במקור על ידי pirsomet (פרסם 675962)
בעיקרון החיבור צריך להסגר אוטומטית אבל, עד כמה שאני יודעה, מסיבות שונות לפעמים זה לא קורה.
אולי הבעיה היא בזה שאתה לא עושה ניתוק ממסד נתונים ואולי גם לא. אי אפשר להגיד כאן בוודאות.

תנסה לברר אצל חברת אחסון\מנהל השרת מה הן ההגבלות של מספר החיבורים למסד נתונים.

חוץ מזה, אם אין לך שימוש בTRANSACTIONS וLOCKS, אתה יכול להשתמש בפונקציה mysql_pconnect בזמן החיבור במקום mysql_connect. זה יפתח חיבור אחד קבוע והמערכת שלך תשתמש בחיבור זה בלי לפתוח חיבורים נוספים.
http://il2.php.net/mysql_pconnect

בראש העמוד יש לי
PHP קוד:

include "mysql.php" 

שבעמוד הזה יש את ההתחברות למסד ואני עובד עם pconnect.

אז כל פעם שהעמוד נטען הוא פותח חיבור חדש או בכל סישן הוא מתחבר פעם אחת ועובד עם אותו חיבור כל פעם עד שיוצאים מהדפדפן?

וומה בקשר לשאלה הראשונה?

vadimg88 23-10-08 15:17

בעקרון זה יכול להיות ככה

קוד:

include "mysql.php" 

.....


mysql_close($link);

בכל מקרה גם בלי קריאה לפונקציה לסגירת ההתחברות, PHP יעשה את זה אוטומטית ברגע שהסקריפט סיים את פעולת העיבוד שלו. כך או כך זה יסגר בסופו של דבר.

בקשר לשאלה הראשונה שלך כשמשתמשים בפונקציות בתוך שאילתות MYSQL זה יכול ליצור בעיות אם לא מגדירים את ה GROUP BY נכון במקרה שלך אתה עושה SELECT ומשתמש ב AVG ואחר כך מסדר אותם ב ORDER BY ושוב עושה AVG , למה? אפשר כבר להשתמש ב rank שהוחזר על ידי ה avg הראשון שנעשה.

זה אמור לעבוד:

קוד:

select `downloads`.`id`,`downloads`.`name`,avg(`ranks`.`rank`) as `rank` from `downloads` left join `ranks` on `ranks`.`download`=`downloads`.`id` group by `downloads`.`id` order `rank` desc limit 4
אם אתה משתמש בpconnect לא בהכרח אומר שזה פעיל בשרת. תבדוק את ההגדרות או דרך phpinfo או דרך הקובץ php.ini כדי לראות אם

mysql.allow_persistent = off

מוגדר ב on ולא off .

עוד דבר לא פחות חשוב זה שיש לך אפשרות להגדיר את כמות המקסימום של ההתחברויות למרות שאתה לא אמור לקבל שגיאה כזאת אלה אם כן יש לך כמות אדירה של משתמשים.

O-B 23-10-08 20:41

ציטוט:

נכתב במקור על ידי vadimg88 (פרסם 676027)
בעקרון זה יכול להיות ככה

קוד:

include "mysql.php" 

.....


mysql_close($link);

בכל מקרה גם בלי קריאה לפונקציה לסגירת ההתחברות, PHP יעשה את זה אוטומטית ברגע שהסקריפט סיים את פעולת העיבוד שלו. כך או כך זה יסגר בסופו של דבר.

בקשר לשאלה הראשונה שלך כשמשתמשים בפונקציות בתוך שאילתות MYSQL זה יכול ליצור בעיות אם לא מגדירים את ה GROUP BY נכון במקרה שלך אתה עושה SELECT ומשתמש ב AVG ואחר כך מסדר אותם ב ORDER BY ושוב עושה AVG , למה? אפשר כבר להשתמש ב rank שהוחזר על ידי ה avg הראשון שנעשה.

זה אמור לעבוד:

קוד:

select `downloads`.`id`,`downloads`.`name`,avg(`ranks`.`rank`) as `rank` from `downloads` left join `ranks` on `ranks`.`download`=`downloads`.`id` group by `downloads`.`id` order `rank` desc limit 4
אם אתה משתמש בpconnect לא בהכרח אומר שזה פעיל בשרת. תבדוק את ההגדרות או דרך phpinfo או דרך הקובץ php.ini כדי לראות אם

mysql.allow_persistent = off

מוגדר ב on ולא off .

עוד דבר לא פחות חשוב זה שיש לך אפשרות להגדיר את כמות המקסימום של ההתחברויות למרות שאתה לא אמור לקבל שגיאה כזאת אלה אם כן יש לך כמות אדירה של משתמשים.

תודה רבה..
עזרת לי מאוד..


כל הזמנים הם GMT +2. הזמן כעת הוא 07:49.

מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ