שלח תשובה

זירת השאלות

585
צפיות
36
תשובות

JOIN – פעם ראשונה שלי אז תעזרו….

,‏ 25 באוגוסט, 2004

שלום,
פעם ראשונה שאני משתמש בJOIN..אף פעם לא למדתי את זה וזוהי הפעם הראשונה אז בבקשה אל תדברו איתי סינית..

אוקי לשאלה הפששוטה שכל אחד יוכל לענות לי על זה:
עשיתי רק את הSELECT של JOIN וכבר יש לי שגיאה
הינה הקוד:


<%

set cp=server.createobject("adodb.connection")
cp="provider=microsoft.jet.oledb.4.0; data source="& server.MapPath("my.mdb") &""
set rp=server.createobject("adodb.recordset")
rp.activeconnection=cp

Select foruma.subject, foruma.message, forumb.subject, forumb.message
From foruma, forumb
order by foruma.id

%>


הינה השגיאה:

Microsoft VBScript compilation error '800a03fd'

Expected 'Case'

/booldogi/three_forum/test.asp, line 8

Select foruma.subject, foruma.message, forumb.subject, forumb.message
——-^ (החץ מצביע על מה שקורה אחרי הSELECT)



אודה לכל מי שיוכל לעזור לי…

תודה מראש לעוזרים!!

תגיות:

36 תשובות

  1. MasterMind הגיב:

    תנסה להכניס אותם בשורה אחת
    ואיפה ה JOIN ?

  2. eLisHa הגיב:

    הנה הפתרון..
    במקום


    rp.activeconnection=cp

    Select foruma.subject, foruma.message, forumb.subject, forumb.message
    From foruma, forumb
    order by foruma.id

    תעשה

    rp.Open "Select foruma.subject, foruma.message, forumb.subject,forumb.message From foruma, forumb order by foruma.id",cp
    rp.activeconnection=cp

    ואיפה הJOIN?

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


    מפרש ה-VBS חושב שאתה מנסה להפעיל את משפט בקרת הזרימה SELECT CASE ולכן כתוב שחסר לך CASE בשגיאה (שים לב שגיאת ריצה של VBS ולא שגיאה של ADO)

    אתה צריך להכניס את משפט ה-SQL שלך כפרמטר בשיטה OPEN של הרקורדסט שלך

  4. לא חשוב—>>>שאלה חדשה-inner join..
    טוב הפעם זה באמת INNER JOIN אבל שוב מופיע לי אותה תקלה!!
    הקוד:

    <%
    set cp=server.createobject("adodb.connection")
    cp="provider=microsoft.jet.oledb.4.0; data source="& server.MapPath("my.mdb") &""
    set rp=server.createobject("adodb.recordset")
    rp.activeconnection=cp

    SELECT foruma.subject, forumb.subject FROM foruma INNER JOIN forumb ON foruma.id = forumb.idx
    %>

    אחרי המילה SELECT הוא מציג לי שיש שגיאה…לא מובן לי..
    הינה השגיאה:

    Microsoft VBScript compilation error '800a03fd'

    Expected 'Case'

    /booldogi/three_forum/test.asp, line 7

    SELECT foruma.subject, forumb.subject FROM foruma INNER JOIN forumb ON foruma.id = forumb.idx
    ——-^ (הקו מוצג אחרי הSELECT)

  5. וואי ניר אתה גאון!! – עוד משהו קטןן
    טוב אז עשיתי ככה וזה עובד:

    <%
    set cp=server.createobject("adodb.connection")
    cp="provider=microsoft.jet.oledb.4.0; data source="& server.MapPath("foruma.mdb") &""
    set rp=server.createobject("adodb.recordset")
    rp.activeconnection=cp

    rp.open "SELECT foruma.subject, forumb.subject FROM foruma INNER JOIN forumb ON foruma.id = forumb.idx"
    %>

    עכשיו אני רוצה לדעת איך להציג רשומה בINNER JOIN…
    כמו שעושים במסד רגיל כך: Rs.Fields("bla")

    אודה מאוד לעוזרים

  6. הוא ביצע join
    בשיטת where clause.

    היא הולכת ככה

    select <fields> from tbl1, tbl2 where tbl1.<field>=tbl2.<field>

  7. גם פה – כמו שניר אמר קודם..
    מנוע הvbs שלך חשוב שאתה רוצה לבצע משפט select case ואומר לך שחסר case.
    אתה פשוט צריך להכניס את השאילתה שלך לopen של אובייקט הרקורדסט שלך.


    rs.open "SELECT foruma.subject, forumb.subject FROM foruma INNER JOIN forumb ON foruma.id = forumb.idx"

  8. טוב הבנתי את ALIAS…אבל לא הולך…
    הינה הקוד:

    rp.open "SELECT foruma.subject AS forumb.subject FROM foruma INNER JOIN forumb ON foruma.id = forumb.idx"

    וזה לא הולך!! הAS כנראה לא במקום….


    The SELECT statement includes a reserved word or an argument name that is misspelled or missing, or the punctuation is incorrect.

    מי יכול לעזור לי?!

  9. הנה..
    משום מה עשית את הקטע הזה:

    foruma.subject AS forumb.subject

    וכל המטרה של ה- AS היא שלא תרשום את אותו שדה. בקום הקטע הזה, תעשה את הבא:

    foruma.subject AS subject

    ובהצגה של הנתונים תעשה

    response.write "the subject is " & rp("subject")

  10. תודה טל…אבל אפשר לשאול עוד משהו??
    אני מצטער על הבורות שלי..זה פעם ראשונה שלי שאני עובד עם זה…

    טוב אז ככה, הקוד שלך באמת עבד מצויין…
    ככה הקוד שלי:

    rp.open "SELECT foruma.subject AS subject FROM foruma INNER JOIN forumb ON foruma.id = forumb.idx"
    Response.Write "The Subject is" & Rp.Fields("subject")

    הקוד עובד מצויין חוץ מדבר אחד קטנטן..
    אני רוצה לשלוף את הSUBJECT השני..
    כלומר, אם אני עושה ככה: Rp.Fields("subject")
    אז מה שקורה זה שהוא שולף לי מהטבלה foruma.
    אבל אני רוצה לשלוף גם מforumb….ואני לא מצליח עם זה: Rp.Fields("subject")

    אז בקיצור זה לא הולך לי כ"כ…

    תודה רבה לעזורים!!

  11. זהר פלד הגיב:

    אז ככה:
    ל subject של foruma תתן alias שיהיה, לדוגמא, subjecta,
    ול subject של forumb תתן ailas שיהיה subjectb,
    ואז לא תהיה לך שום בעיה לגשת ל subjecta או ל subjectb מתוך ה recordset.

  12. זהר פלד הגיב:

    לא, רק בשאילתה תתן לכל אחד מהם
    alias שונה:


    rp.open "SELECT foruma.subject AS subjectA, forumb.subject AS subjectB FROM foruma INNER JOIN forumb ON foruma.id = forumb.idx"

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


    Rp.Fields("SUBJECTB")

  14. עוד בעיה..קשור לINNER JOIN…..
    טוב שמעו, זה שאני התחלתי ללמוד Inner Join , זה לא סתם…פשוט אני הייתי חייב להכין לעצמי פורום עץ, ואמרו לי שהדרך היחידה להכין את זה, זה ללמוד Inner Join

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

    אז בקיצור, מישהו יכול לעזור לי עם זה?
    הינה לינק לדף:
    http://freehost02.websamba.com/bananai/test.asp
    והינה הקוד:


    <%@language="VBSCRIPT" CODEPAGE="1255"%>
    <HTML dir="rtl">
    <body>
    <%
    set cp=server.createobject("adodb.connection")
    cp="provider=microsoft.jet.oledb.4.0; data source="& server.MapPath("my.mdb") &""
    set rp=server.createobject("adodb.recordset")
    rp.activeconnection=cp

    rp.open "SELECT foruma.subject AS subjectA, foruma.id, forumb.subject AS subjectB, foruma.id AS idA, forumb.id AS idB FROM foruma INNER JOIN forumb ON foruma.id = forumb.id order by forumb.id DESC"
    %>

    <% Do until Rp.EOF %>

    <table style="background:#000000; width:550; font-size:10pt; color:#FFFFFF; font-family:Arial; font-weight:bold;">
    <tr><td>
    <%= Rp("idA") %>
    </td>
    <td>
    <span style="color:#003360">•</span>
    <%= Rp("subjectA") %></td>
    </tr><tr>
    <td><%= Rp("idB") %></td>
    <td>
    <% if Rp("subjectB") = "" then %>
    <span style="color:#AAA7C1">•</span>
    <%= Rp("subjectB")%>
    <% Else %>
    <span style="color:#EA9106">•</span>
    <%= Rp("subjectB") %>
    <% End if %>
    </td>
    </tr></table>
    <%
    rp.movenext
    loop
    %>

    </body></html>

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

    תודה מראש לכל מי שיוכל לעזור!!

  15. תוספת קטנה להסבר…
    במסד נתונים שלי זה הולך ככה:
    foruma.id – מספר אוטומטי
    foruma.subject – טקסט – הנושא הראשי של ההודעה.

    forumb.id – מספר – לפי זה אני מזהה את הנושא המתאים לו ע"פ הID של הטבלה FORUMA.

    forumb.idx – מספר אוטומטי
    forumb.subject – נושא של התגובה.

    בבקשה תעזרו אנשים..

  16. אני יודע מה הבעיה! אבל אני לא מצליח
    לפתור אותה…

    הבעיה היא פשוטה..
    הוא דווקא כן משרשר את הנושא בהתחלה ואח"כ תגובות מתאימות, אבל אחרי תגובה הוא שוב מציג את הנושא הראשי שלה…מבינים?
    זה אמור להיות ככה:
    * נושא ראשי
    * תגובה א'
    * תגובה ב'
    וכו'..

    אבל במקום זה, הוא מציג לי כך:
    *נושא ראשי
    *תגובה א'
    *נושא ראשי
    *תגובה ב'
    וכו'….

    נו אז עכשיו זה ממש קל לכל המינים..אז יאלה אנשים תנו לי תשובה..

  17. ישששששששששששששששששששששששששששששששששש
    הצלחתי!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    וואי איזה כייף!!

  18. כי…
    בלולאה שלך אתה כל פעם אומר לו לשלוף את הנושא. אתה עושה ככה <בלי העיצוב>

    Do until Rp.EOF
    response.write Rp("subjectA")
    response.write Rp("subjectB")
    rp.movenext
    loop

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

    Do until Rp.EOF
    response.write Rp("subjectA")
    Do until Rpb.EOF
    response.write Rp("subjectB")
    rpb.movenext
    loop

    rp.movenext
    loop

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

  19. חחחחחח…כן ועשיתי משהו פשוט יותר..
    במקום להריץ לולאה בתוך לולאה וליצור עוד recordest, עשיתי משהו יותר פשוט..
    סתקלו:


    <% If ThisIsNot <> Rp("idA") then %>
    <td>
    <%= Rp("idA") %>
    </td><td>
    <span style="color:#618ECF">•</span>
    <%= Rp("subjectA") %></td>
    <td> | <%= Rp("nameA") %></td>
    <%
    ThisIsNot = Rp("idA")
    %>
    <% End if %>

    לדעתי זה מתוחכם ופשוט יותר..

    אבל אני מודה לך מקרב לב!!
    וגם לכל מי שתרך לעזור!

  20. אני נתתי לך את הרעיון הכללי..
    אתה בלי לדעת (או שכן) פשוט עשית רקורסיה 🙂

  21. חחח..וואלה?! לא ידעתי
    אם אתה אומר אז סבבה…
    אני לא מתווכח עם מקצועניים….

  22. שאלה על פורמי עץ…
    נכון כאן בפורום יש על כל תגובה מן רווח כזה בשולים???
    אז איך עושים את זה?? האם ע"י רווח או משהו אחר…??

  23. והאם הקוד הזה טוב לפורום עץ?
    זה ללא הJS אלא רק ASP.


    <% If ThisIsNot <> Rp("idA") then %>
    <a href="ForumIdS.asp" style="text-decoration: none;"><span style="color:#618ECF">•</span></a>
    <a class=link_bold2 Href='javascript:ShowHide(<%= Goofi %>)'>
     <%= Rp("subjectA") %>
    <% ThisIsNot = Rp("idA") %>
    <% WAZ = "yes" %>
    <% collsp = "" %>
    </a>
    <% Else %>
    <% if HowMuchCollsp < 9 then %>
    <% collsp = ""& collsp &"  " %>
    <% Else %>
    <% collsp = " " %>
    <% End if %>
    <%=collsp%>
    <a href="ForumIdS.asp"><span style="color:#EA9106" style="text-decoration: none;">•</span></a>
    <a class=link_bold2 Href='javascript:ShowHide(<%= Goofi %>)'>
     <%= Rp("subjectB") %>
    <% WAZ = "not" %>
    </a>
    <% End if %>
         </td>
      <td align=right>

         <a href='Pcard.asp?uid=711'>

      <% if WAZ = "yes" then %>
    <%=Rp("nameA") %>
    <% Else %>
    <%=Rp("nameB") %>
    <% End if %>
    </a>
                  </td></tr></table>
           </td></tr>

         <tr><td colspan=5 width='100%'>
             <table bgcolor='#B9CFE7' border=0 cellspacing=0 cellpadding=0 width='100%'><tr>
                  <td dir=rtl align=right colspan=5>
                    <DIV id='d_<%= Goofi %>' style="DISPLAY:none;">
                    <table cellspacing=2 cellpadding=2 width='100%' border=0 bordercolor=#D1E9F5>
                        <tr><td width=100% bgcolor='#F0F4F8'>
    <% if WAZ = "yes" then %>
    <%=Rp("messageA") %>
    <% Else %>
    <%=Rp("messageB") %>
    </td></tr>
    <% End if %>
                        <tr><td width=100% bgcolor='#DDE9F5'>  <a href='Reply.asp?fid=7&rid=6&Aid=<%= Goofi %>'><font color='#075CAB'><b> תגובה </b></font></a>     <a href='msg_Update.asp?fid=7&Aid=<%= Goofi %>'><b><font color='#075CAB'> עדכן </font></b></a><br>  </td></tr>
                    </table>
                    </div>
           </td></tr></table>
    <%
    rp.movenext
    loop
    %>

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

  24. talg14 הגיב:

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

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

    אין מה להסביר על המסד
    כי העמודה rootId כבר קיימת ועל פיה עושים את החלוקה לעמודים
    הרעיון הוא לשלוף את כל ההודעות שה-ROOTIDים שלהם נמצאים בין X שורשים(ROOTIDים)
    כאשר מעמוד שני ומעלה זה הולך ככה:
    לשלוף את כל ההודעות שה-ROOTIDים שלהם נמצאים בין X שורשים ראשונים(ROOTIDים) שלא נמצאים בין (X*מס' העמוד) שורשים ראשונים

    כאשר X זה מס' ההודעות בעמוד

  26. talg14 הגיב:

    לא הבנת אותי…
    לא הסבר כימעט על איך ליבנות את המסד עצמו אמרת משהו שצריך להיכנס לquerys או משהו כזה בצד וללחוץ על צור שאילתא משהו עיצוב וזהו אבל מה אני עושה אם זה עכשיו?

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

    אתה שומר את השאילתא
    בשם fixedforum וממשיך הלאה

שלח תשובה