שלח תשובה

זירת השאלות

389
צפיות
16
תשובות

פקודת union

,‏ 13 בספטמבר, 2004

מנסה לשלוף ולהציג נתוני סיכומי דברים עם לקוחות עם הפקודה union בפועל הוא מציג לי הרבה יותר רשומות ממה שארני אמור לראות.
האם ניתן להוסיף למשפט select עם union תנאי: where???
והקוד:


set rs21=Server.CreateObject ("adodb.recordset")
sql21="select id,client_id,sikum,sikum_date from kesher_settle_sikumim union select id,client_id,sikum,sikum_date from kesher_settle_sikumimf where client_id=" & client_id  rs21.Open sql21,conn,3
'response.write sql21
if rs21.EOF and rs21.BOF then
i=1
else
rs21.movelast
Response.Write "<br><br><div align=right dir=rtl><b><u> סיכומים עם הלקוח </u></b><br><br>"
do until rs21.bOF
day6=day(rs21("sikum_date"))
mon6=month(rs21("sikum_date"))
year6=year(rs21("sikum_date"))
sikum_date=day6 & "/" & mon6 & "/" & year6
Response.Write "<u>" & sikum_date & "</u><br>" & rs21("sikum") & "<br><br>"
rs21.Moveprevious
loop
end if

תודה

תגיות:

16 תשובות

  1. אני לא מבין..
    מה אתה מנסה לעשות? לשלוף סיכומים לפי מספר לקוח?
    תפרט.

    ולמיטב ידיעתי אפשר להשתמש עם where בשאילתת union.

  2. פחן הגיב:

    אני אנסה להסביר
    מה שקורה זה שצירפתי לטבלה ראשית שמות של לקוחות מטבלה ישנה אשר קיימת להם גם טבלה ישנה של סיכומים.
    אני מנסה לחפש ב-2 הטבלאות (החדשה של הסיכומים והישנה של הסיכומים) האם קיימים סיכומים למספר client_id ואז לשלוף אותם.
    את הבדיקה הזו אני צריך לעשות ב-2 הטבלאות המצוינות מעלה.
    תודה על התגובה.

  3. אז תשתמש בcross join
    (בשיטת where clause כי כתיבת cross join בשאילתה לא עובד באקסס).
    שימוש בunion לא כ"כ מתאים בקטע הזה.


    SELECT id,client_id,sikum,sikum_date FROM kesher_settle_sikumim, kesher_settle_sikumimf WHERE kesher_settle_sikumim.client_id = client_id AND kesher_settle_sikumimf.client_id = client_id

  4. תיקון


    SELECT * FROM kesher_settle_sikumim, kesher_settle_sikumimf WHERE kesher_settle_sikumim.client_id = client_id AND kesher_settle_sikumimf.client_id = client_id

    קודם שכחתי לכתוב את שמות הטבלאות אחרי הselect, אז תחליף את הכוכבית בשדות שלך.
    נגיד ככה:

    kesher_settle_sikumim.client_id

    לכל השדות שאתה שולף בהתאם

  5. פחן הגיב:

    האם * תופס
    או שצריך לפרט כרל שדה???
    ומה ההבדלים בין join ל-union???
    תודה רבה על העזרה.

  6. פחן הגיב:

    נותן לי את השגיאה הבאה


    The specified field 'client_id' could refer to more than one table listed in the FROM clause of your SQL statement.


    הקוד הוא:


    set rs21=Server.CreateObject ("adodb.recordset")
    sql21="SELECT * FROM kesher_settle_sikumim, kesher_settle_sikumimf WHERE kesher_settle_sikumim.client_id = client_id or kesher_settle_sikumimf.client_id=client_id"
    rs21.Open sql21,conn,3
    'response.write sql21
    if rs21.EOF and rs21.BOF then
    i=1
    else
    rs21.movelast
    Response.Write "<br><br><div align=right dir=rtl><b><u> סיכומים עם הלקוח </u></b><br><br>"
    do until rs21.bOF
    day6=day(rs21("sikum_date"))
    mon6=month(rs21("sikum_date"))
    year6=year(rs21("sikum_date"))
    sikum_date=day6 & "/" & mon6 & "/" & year6
    Response.Write "<u>" & sikum_date & "</u><br>" & rs21("sikum") & "<br><br>"
    rs21.Moveprevious
    loop
    end if
    rs21.Close
    conn.Close
    set conn=nothing
    %>

  7. בד"כ כדאי לפרט את כל השדות,
    אפילו אם הם כולם.
    (בחירה שלך)

    union = פקודה שמשמשת לאיחוד שאילתות.
    ניתן להשתמש בunion או בunion all.

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

    union
    join

  8. המשך
    השגיאה אומרת שהמשתנה client_id הוא גם שם של טבלה בשתי השדות, אתה צריך לכתוב request("client_id")
    (אני מניח שהשתמשת בrequest)

  9. פחן הגיב:

    הבעייה עכשיו
    שהוא חושב המון ותנתקע כאילו.
    יש לי בטבלת סיכומים אחת 14,432 רשומות ובטבלה שנייה 8,067 רשומות האם זו הבעייה???

  10. ניר טייב הגיב:

    למה אבל אתה שולף הכל ?
    מי הסתכל על 22 אלף + רשומות בדף אחד ?

  11. פחן הגיב:

    אני לא שולף הכל
    בשביל זה ישנו התנאי where

  12. פחן הגיב:

    אני מנסה לעקוף אתזהה
    ולעשות ע"פ תנאים שאם הוא לא מצא בטבלה הראשונה יחפש בטבלה הישנה ומשום מה הוא לא נותן לי שגיאה אבל הוא גם לא מציג לי למרות שלפי הבדיקה שלי יש נתונים בטבלה השנייה שזה הקוד שלי:


    set rs21=Server.CreateObject ("adodb.recordset")
    sql21="select * from kesher_settle_sikumim where client_id=" & client_id  
    rs21.Open sql21,conn,3
    'response.write sql21
    if rs21.EOF and rs21.BOF then
    set rs22=Server.CreateObject ("adodb.recordset")
    sql22="select * from kesher_settle_sikumimf where client_id=" & client_id  
    rs22.Open sql22,conn,3
    if rs22.EOF and rs22.BOF then
    b=1
    else
    rs22.movelast
    Response.Write "<br><br><div align=right dir=rtl><b><u> סיכומים עם הלקוח </u></b><br><br>"
    do until rs22.bOF
    day4=day(rs22("sikum_date"))
    mon4=month(rs22("sikum_date"))
    year4=year(rs22("sikum_date"))
    sikum_date=day4 & "/" & mon4 & "/" & year4
    Response.Write "<u>" & sikum_date & "</u><br>" & rs22("sikum") & "<br><br>"
    rs22.Moveprevious
    loop

    end if
    rs22.close
    else
    rs21.movelast
    Response.Write "<br><br><div align=right dir=rtl><b><u> סיכומים עם הלקוח </u></b><br><br>"
    do until rs21.bOF
    day6=day(rs21("sikum_date"))
    mon6=month(rs21("sikum_date"))
    year6=year(rs21("sikum_date"))
    sikum_date=day6 & "/" & mon6 & "/" & year6
    Response.Write "<u>" & sikum_date & "</u><br>" & rs21("sikum") & "<br><br>"
    rs21.Moveprevious
    loop
    end if
    rs21.Close
    conn.Close
    set conn=nothing
    %>

  13. פחן הגיב:

    האם מישהו יודע אולי
    למה הקוד תנאי לא פועל???

  14. פחן הגיב:

    איך אני גורם
    לדף אינטרנט להסגר אם לא נגעו בו במהלך זמן מסויים אשר אני יגדיר.

  15. Alon12 הגיב:

    ככה:


    <script language="javascript">
    setTimeout(10000,'close();')
    </script>

    10000 זה הזמן במילי שניות
    close זה פונקציית סגירה

שלח תשובה

חדש! אחסון אתרים של וובמאסטר

שירות אחסון אתרים
המקצועי של וובמאסטר!

מומחים באירוח אתרי
WordPress, Joomla, Drupal

  • שרתי לינוקס עם CloudLinux, LiteSpeed
  • 1GB דיסק SSD, 10GB תעבורה חודשית
  • ממשק ניהול cPanel, תעודת SSL חינם

עכשיו במחיר היכרות:
רק 420 ש"ח לשנה!