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

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

איציק ברבי 31-10-12 14:36

מהו האלגוריתם היעיל ביותר לבניית עגלה במערכת של חנות וירטואלית.
 
חשבתי על דבר כזה:

עמודה בטבלה users
ויהיה בה את: productID-productAmount

ולפי זה יוצג התוכן,

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

יש לכם רעיון יותר טוב?

dor77 31-10-12 14:45

תסביר שוב מה אתה מעוניין לעשות?
לא ממש הבנתי.

אדיר 31-10-12 15:41

ספציפית למה שאתה מתאר, הנה תיאור של טבלה מקשרת פשוטה.
id | user_id | item_id | amount

אפשר לעשות בזה שינויים כמובן -
אולי העמודה id תהיה מיותרת עבורך,
אולי אתה מעדיף לשמור את ה- amount בצורה אחרת (רשומה נוספת עבור כל פריט),
זה הרעיון הכללי.

M.a.T.a.N 31-10-12 15:55

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

בקשר למחיקה - אני לא כ"כ הבנתי אם קיימת לך טבלה של המוצרים שמשתמש רכש, אם אין לך טבלה כזאת והכוונה שלך שכל המוצרים של המשתמש נמצאים בעמודה מסויימת בטבלה של המשתמשים אז ככה:
תעשה הפרדה במסד למשל של הסימן "|" שיפריד בין מוצר למוצר, ופשוט כשהוא ירצה למחוק מוצר מסויים תעשה לולאה שתריץ את הCOUNT של הEXPLODE של הסימן "|", בתוך תעשה תנאי אם המוצר הנוכחי שרץ בלולאה לא שווה למוצר שהוא רוצה למחוק שיעדכן לתוך משתנה את המוצר, אם זה המוצר שהוא רוצה למחוק אז הוא לא יעשה כלום.
בסוף תעדכן במסד את המשתנה שקיבלת (שהוא יהיה כמובן ללא הערך של של המוצר שהוא מחק).
לתת לך קצת כיוון הקוד יראה ככה +-:
PHP קוד:

$removeID $_POST['ID']; // המוצר שהמשתמש רוצה למחוק
$allProducts $row['productID']; //הערך של העמודה בה נמצאים כל המוצרים של המשתמש (מופרדים ב"|")
$ex explode("|"$allProduct); //מפצל ע"פ |
for($i=0;$<count($ex);$i++) //מתחיל לולאה שמריצה את כל המוצרים של המשתמש
    
if($ex[$i]!=$removeID//בודק אם המוצר שאני רוצה למחוק זה המוצר שרץ כרגע בלולאה
        
$updateProduct .= $ex[$i];    //אם לא פשוט לעדכן לתוך המשתנה כדי לשמור על המוצרים שלא נמחקו

//עכשיו הקוד שמעדכן את המשתנה updateProduct למסד 


אדיר 31-10-12 16:43

ציטוט:

נכתב במקור על ידי M.a.T.a.N (פרסם 861948)
קודם כל למה שיהיו כפילויות? בכל פעם כשמשתמש נכנס למוצר מסויים זה יעשה חיפוש במסד אם המוצר כבר בעגלת הקניות שלו,
אם כן פשוט לא יהיה ניתן לרכוש עוד פעם את המוצר (אם הוא ירצה לקנות מס' פעמים את המוצר שיהיה את זה באפשרות נפרדת).

בקשר למחיקה - אני לא כ"כ הבנתי אם קיימת לך טבלה של המוצרים שמשתמש רכש, אם אין לך טבלה כזאת והכוונה שלך שכל המוצרים של המשתמש נמצאים בעמודה מסויימת בטבלה של המשתמשים אז ככה:
תעשה הפרדה במסד למשל של הסימן "|" שיפריד בין מוצר למוצר, ופשוט כשהוא ירצה למחוק מוצר מסויים תעשה לולאה שתריץ את הCOUNT של הEXPLODE של הסימן "|", בתוך תעשה תנאי אם המוצר הנוכחי שרץ בלולאה לא שווה למוצר שהוא רוצה למחוק שיעדכן לתוך משתנה את המוצר, אם זה המוצר שהוא רוצה למחוק אז הוא לא יעשה כלום.
בסוף תעדכן במסד את המשתנה שקיבלת (שהוא יהיה כמובן ללא הערך של של המוצר שהוא מחק).
לתת לך קצת כיוון הקוד יראה ככה +-:
PHP קוד:

$removeID $_POST['ID']; // המוצר שהמשתמש רוצה למחוק
$allProducts $row['productID']; //הערך של העמודה בה נמצאים כל המוצרים של המשתמש (מופרדים ב"|")
$ex explode("|"$allProduct); //מפצל ע"פ |
for($i=0;$<count($ex);$i++) //מתחיל לולאה שמריצה את כל המוצרים של המשתמש
    
if($ex[$i]!=$removeID//בודק אם המוצר שאני רוצה למחוק זה המוצר שרץ כרגע בלולאה
        
$updateProduct .= $ex[$i];    //אם לא פשוט לעדכן לתוך המשתנה כדי לשמור על המוצרים שלא נמחקו

//עכשיו הקוד שמעדכן את המשתנה updateProduct למסד 


לא, פשוט לא.
MySQL הוא RDBMS, לא צריך לעשות דברים בצורה גרועה כזאת.

איציק, תקרא על "many to many relationship" ותקח לדוג' את המבנה שהבאתי בתגובה הראשונה שלי.

Haimz 31-10-12 16:54

לא הבנתי איפה הסתבכת, בתנאי שאתה רוצה להוסיף לטבלה מוצרים, ולאפשר למחוק אותם, כך תראה הטבלה שלך:
id | uid | product | amount | price
uid = האיידי של הקונה.

מחיקה פשוטה לפי איידי, והבדיקה היא אם העמודה uid שווה לאיידי של המשתמש.

אדיר 31-10-12 16:59

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

איציק ברבי 31-10-12 17:01

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


מה שהוא התכוון:

טבלה בשם cart

עמודות: cardID | userID | productID | Amount

ככה זה יכול להקל על הכל.

תודה רבה חברים.

Haimz 31-10-12 17:02

ציטוט:

נכתב במקור על ידי xPerfection (פרסם 861960)
חיים -
העמודה price מיותרת ועלולה ליצור בעיות מיותרות, לדוגמה במקרה של שינוי המחיר של המוצר.
רצוי שהנתון ישמר במקום אחד וקבוע, בטבלת המוצרים, משם הוא ישלף על פי הצורך.

צודק שכחתי שיש טבלה למוצרים, אז אם כבר עושים את השליפה, העמודה product צריכה להיות pid

M.a.T.a.N 31-10-12 19:31

ציטוט:

נכתב במקור על ידי xPerfection (פרסם 861957)
לא, פשוט לא.
MySQL הוא RDBMS, לא צריך לעשות דברים בצורה גרועה כזאת.

איציק, תקרא על "many to many relationship" ותקח לדוג' את המבנה שהבאתי בתגובה הראשונה שלי.

אוקיי, ומה זה קשור? אפשר להשתמש בו בצורה הזאת ותאמין לי שלא יקרה כלום...


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

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