![]() |
ארגון נתונים של הוצאה ממסד לפי מחרוזת.
יש לי עמודה במסד בשם time
והיא בנוייה בפורמט כזה: PHP קוד:
זאת הכוונה. איך אני מבצע את זה? ORDER BY לא מועיל בקטע הזה. ------ העמודה הייתה בפורמט TEXT ולא בפורמט time סידרתי את זה עם כמה דברים וזהו.. |
למה לא להשתמש בפונקציה של mysql
()date |
למה אתה לא מאחסן את הזמנים עם time() שמחזיר לך זמנים בint של שניות?
ככה אתה יכול למיין לפי זמנים (מספר גדול יותר = זמן מאוחר יותר) וגם הצגה של הזמנים בכל פורמט שתרצה (אחרי השליפה להשתמש בפונקצייה date לקבלת איזה פורמט שתרצה). |
אני מכיר את זה,
במקרה הזה אני צריך אותם ככה. |
אם מה שמעניין אותך זה רק השעה והדקה, ומדובר בשעון 24 אני הייתי עושה שני שדות TINY INT שבאחד הייתי שומר את המספר של הדקה ובאחד את השעה
או שדה DATETIME ואם לא אכפת מהתאריך, תעשה שהכל באותו תאריך רק מה ששונה זה השעה והדקה. אפשר בקלות לעשות שאילתא שתקח את הנתוני STRING שלך ותכניס אותם לשדות הרלונטים, אפילו בלי לערב PHP רק בMYSQL (במידה וזה לא טבלאות ענקיות כמובן...) לחלופין: אם ממש לא אכפת לך מיעילות וזה איזה משהו חד פעמי אתה יכול בתוך השאילתה לפרק את הסטרינג למספר ולעשות את הORDER BY לפי זה אבל קח בחשבון שזה יהיה חייב לטייל על כל הטבלה |
כמו שכבר אמרו לך מה שלא תמצא - זה יהיה דיי לא יעיל. אבל אם אתה ממש צריך את זה - פתרון אפשרי (אך כמו שנאמר - לא יעיל בעליל):
תעשה: PHP קוד:
|
ציטוט:
חידשתם לי דברים.. |
למה לא להשתמש בשדה מהסוג המיועד לכך וזהו..?
https://dev.mysql.com/doc/refman/5.5...ime-types.html |
אם היית קורא את הנושא כמו שצריך הייתי מבין שכבר עליתי על הפתרון.
שאלה נוספת - יש לי ערך כזה xx:xx:xxxx אני רוצה לפצל את הxx:xx הראשונים סוג של explode אני מעוניין לבצע את זה דרך SQL. |
הכל נמצא בתיעוד של MYSQL :-)
|
ציטוט:
זה ממש bad practice לשמור מידע בצורה הזאת, בין היתר מאחר ואתה מבזבז מקום בדיסק, מתקשה לבצע שאילתות יעילות (השאילתות שהציגו לך כאן מאוד מאוד מאוד לא מומלצות) וברגע שכמות הבקשות ל-DB תתחיל לעלות תחווה איטיות בקבלת תשובה לשאילתות שלך ואף קריסות. כמו שרבים המליצו לך כבר, מאוד מומלץ להחזיק את הערך הזה בתא ייעודי: בין אם ע"י timestamp, שדה date time או אפילו עמודה ייעודית לשעה ועמודה ייעודית לתאריך. |
את העבודה שלי אני יודע לעשות,
אני צריך את התוכן ככה מכוון והוא מוצג הרבה יותר פעמים באותו פורמט, ואם אני אתחיל לפצל את זה אז זה לא יגמר בחיים והשרת עצמו ייתעייף. בבקשה אל תסטו מהנושא ותענו על השאלה שלי אם אתם יכולים. |
ציטוט:
העובדה ש- "ככה זה" אצלך לא אומרת ש- "ככה זה" אמור להיות. אתה עושה את זה בצורה לא נכונה וזאת גם אחת הסיבות שזה לא עובד לך כמו שצריך. העובדה שהמידע מוצג בצורה מסויימת לא אומרת שככה הוא גם צריך להיות שמור במסד הנתונים. קיימים סוגי שדות המותאמים במיוחד לעבודה עם זמנים, בהם אתה צריך להשתמש. את ההמרה לפורמט התצוגה שאתה רוצה אתה יכול לעשות ב- PHP באמצעות פונקציות ייעודיות לעבודה עם זמנים גם כן, ככה זה צריך להיות ואין סיבה שתמציא מחדש את הגלגל. תאמין לי שהשרת "יתעייף" הרבה יותר אם תעשה את זה כמו שאתה מתכנן לעשות את זה עכשיו מאשר אם תעשה את זה כמו שצריך לעשות את זה. |
ציטוט:
הבעיה הראשונה נפתרה. תסתכל בהודעה הראשונה שלי(ערך השדה היה TEXT במקום TIME) וסידרתי זה. עכשיו אני בבעיה אחרת. אני מאחסן נתונים בצורה כזאת: xx*xx*xx*xx אני מעוניין להשוואות את הנתונים הכוונה בmysql_num_rows אני לא רוצה להתעסק בהוצאה מהמסד וכ'ו.. אני רוצה לציין שלא מדובר בשעות\תאריכים אלא במידע פשוט. |
ציטוט:
החיבור בצד שרת הוא טרוויאלי כאשר יש לך את ה-data מה-DB. מנגד אתה מרוויח את היכולת לבצע שאילתות בהתאם לחיתוכים שאתה רוצה היום, וגם בעתיד. לא סתם כולנו ממליצים לך בחום לשמור את המידע בצורה הנכונה ולא להמציא תבניות שרק אתה מבין ולשמור את ה-DATA בטבלה ככה. כל אתה ממליץ את זה מניסיון אישי שלו. לדוגמה אני הייתי צריך כמה פעמים להריץ סקריפטים על הרשומות שממירות מידע שנשמר בפורמט לא נכון ומחלק אותו לעמודות. בקיצור, אתה צריך להתסכל על המצב עם ראיה לעתיד, ולא רק במטרה לסיים את המשימה שלך עכשיו. |
ציטוט:
אני מסביר שוב ושוב שמדובר במחרוזת רגילה. ששומרת 3 נתונים xx|xx|xx המופרדים באמצעות | לצורך השוואה אני צריך את ה-xx|xx הראשונים(mysql_num_rows) אין שום סיבה שאני אצטרך לשמור את הנתונים האלו בעמודות נפרדות. |
תשתמש בSPLIT או SUBSTRING בתוך השאילתה שלך.. חפש בגוגל.
וגם אני ממליץ לך לסדר את הDB שלך.. הייתי כמוך עקשן ומתעלם מהערות עד שאתר אחד שלי נהיה גדול עם המון כניסות והתחיל להיות ממש ממש איטי, חשבתי שזה בעיה בשרת - עברתי לNGINX לא עזר - שידרגתי את השרת (היה כרוך באינטגרציות שבהם החזקתי 2 שרתים בו"ז) וגם לא עזר - בסוף הסתבר שהשאילתות שלי היו כל כך גרועות הDB חטף DEADLOCK על ימין ועל שמאל וזה תקע את האתר. לא חוכמה ללמוד מטעויות שלך - החוכמה האמיתי היא ללמוד גם מטעויות של אחרים. בהצלחה. |
ציטוט:
אולי תוכל לכוון אותי בצורה שהיא? |
MYSQL String Functions
http://dev.mysql.com/doc/refman/5.0/...functions.html SUBSTR() Return the substring as specified SUBSTRING_INDEX() Return a substring from a string before the specified number of occurrences of the delimiter SUBSTRING() Return the substring as specified ועוד רבות אחרות |
ציטוט:
|
כל הזמנים הם GMT +2. הזמן כעת הוא 09:51. |
מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ