<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[עבודה עם ריבוי תוצאות MySQL מתוך Asterisk]]></title><description><![CDATA[<p dir="auto">בס"ד</p>
<p dir="auto">אני יודע שאין פה יותר מידי מתכנתים שמתעסקים עמוק ב-DialPlan של אסטריסק,<br />
אבל אני באמצע פרויקט עם שעון חול שאוזל, אז אמרתי אנסה את מזלי... <img src="https://tchumim.com/assets/plugins/nodebb-plugin-emoji/emoji/android/1f644.png?v=9d71ebe86e6" class="not-responsive emoji emoji-android emoji--face_with_rolling_eyes" style="height:23px;width:auto;vertical-align:middle" title=":face_with_rolling_eyes:" alt="🙄" /></p>
<p dir="auto">אני ניגש למסד MySQL ישירות מתוך ה DialPlan של אסטריסק באמצעות הפקודה <a href="https://www.voip-info.org/asterisk-cmd-mysql/" target="_blank" rel="noopener noreferrer nofollow ugc">MySQL</a>.<br />
הביצוע של השאילתות שליפה / הוספה / עדכון עובד בסדר גמור*.</p>
<p dir="auto">*<strong>אבל</strong>, כאשר אני מבצע שאילתת שליפה שאמורה להחזיר יותר מתוצאה אחת,<br />
לדוגמא: שליפה של כל המוצרים שמשוייכים לקטגוריה X,<br />
המאפיין "Fetch" שמכניס את התוצאות למשתנים - מכניס רק את ההתאמה (השורה) הראשונה,<br />
ואם אני חוזר שוב על ה "Fetch" הוא מכניס רק את השניה וכן הלאה,<br />
עד ההתאמה האחרונה, ואז חזרה נוספת על ה "Fetch" תוציא שגיאה.</p>
<p dir="auto"><strong>השאלה שלי,<br />
איך אני יכול לדעת כמה תוצאות אמורות להיות,<br />
ובעיקר, איך אני מנווט בין התוצאות קדימה ואחורה או "תופס" התאמה ספציפית (לדוגמא, 4).</strong></p>
<p dir="auto">אני מבין שאפשר לבצע עבודה שחורה של קוד - ולכתוב שאילתות לכל דבר:<br />
למשל, שאילתה מקדימה שתיתן את סכום התוצאות הצפוי, ולשמור במשתנה נפרד.<br />
או לדוגמא, לקרוא את ה-id של התוצאה הנוכחית, ובעקבותיו שאילתא חדשה שתחפש מיהו ה id שלפניו / אחריו, ואז להריץ שאילתא חדשה על ה id החדש לראות אם הוא עומד בתנאים המבוקשים.<br />
<strong>אבל ברור שזה לא תכל'ס.</strong></p>
<p dir="auto"><strong>האם מישהו יודע על דרך נורמלית לטייל בין ההתאמות שהתקבלו?</strong></p>
<p dir="auto"><strong>תודה רבה!!!</strong></p>
]]></description><link>https://tchumim.com/topic/2465/עבודה-עם-ריבוי-תוצאות-mysql-מתוך-asterisk</link><generator>RSS for Node</generator><lastBuildDate>Fri, 17 Apr 2026 23:01:52 GMT</lastBuildDate><atom:link href="https://tchumim.com/topic/2465.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 26 Apr 2018 00:08:32 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to עבודה עם ריבוי תוצאות MySQL מתוך Asterisk on Thu, 26 Apr 2018 12:43:16 GMT]]></title><description><![CDATA[<p dir="auto">לדעתי תפתח ותסגור כל שאילתה, וגם תעשה שאילתה ממש לכל צעד.</p>
]]></description><link>https://tchumim.com/post/23463</link><guid isPermaLink="true">https://tchumim.com/post/23463</guid><dc:creator><![CDATA[dovid]]></dc:creator><pubDate>Thu, 26 Apr 2018 12:43:16 GMT</pubDate></item><item><title><![CDATA[Reply to עבודה עם ריבוי תוצאות MySQL מתוך Asterisk on Thu, 26 Apr 2018 11:50:08 GMT]]></title><description><![CDATA[<p dir="auto">מעניין לעניין באותו עניין,</p>
<p dir="auto"><strong>מה באמת כדאי - לגבי סגירת קונקשן,</strong></p>
<p dir="auto">כשלמעשה לאורך כל השיחה אני מבצע שאילתות,<br />
כל תזוזה בין מוצרים / הזמנת מוצרים - אמורה לכאורה לבצע גישה לדטהבייס.<br />
כמובן שאת ניקוי ה "result" אני חייב לבצע לפני כל ביצוע שאילתא חדשה.<br />
אבל לגבי סגירת הקונקשן, טכנית אני יכול להגדיר שהכיבוי שלו יתבצע רק בעת ניתוק השיחה.</p>
<p dir="auto">האם עדיף לאמץ נוהל קבוע לעשות ניקוי result וסגירת קונקשן מיד בסיום כל שאילתא,<br />
או שסגירת ופתיחת קונקשנים כל הזמן - יאטו את הביצועים כשאין בזה צורך של ממש?</p>
<p dir="auto">תודה רבה!</p>
]]></description><link>https://tchumim.com/post/23453</link><guid isPermaLink="true">https://tchumim.com/post/23453</guid><dc:creator><![CDATA[איש אחד]]></dc:creator><pubDate>Thu, 26 Apr 2018 11:50:08 GMT</pubDate></item><item><title><![CDATA[Reply to עבודה עם ריבוי תוצאות MySQL מתוך Asterisk on Thu, 26 Apr 2018 11:12:27 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/%D7%90%D7%99%D7%A9-%D7%90%D7%97%D7%93">@<bdi>איש-אחד</bdi></a><br />
אם זה המקרה זה לוגיקה של דפדפוף אלא דפדוף לשם דיפדוף. לזה אין לי פתרון.</p>
<p dir="auto">אגב, ההבנה שלך שfetch סה"כ מפרסר רשומה מresult שגויה לדעתי.<br />
בresult אין את הטבלה רק buffer - כלומר גוש הנתונים הבא. אם למשל אתה מתשאל 20,000 שורות<br />
אתה יכול לראות שבזכות הfetch (שזה נקרא בכלל השפות forward-only cursor) הזיכרון ייראה בדיוק אותו דבר כמו עם אלף שורות.<br />
מאותה סיבה גם אסור לסגור את הקונקשיין בטרם יתבצע הfetch האחרון.</p>
]]></description><link>https://tchumim.com/post/23435</link><guid isPermaLink="true">https://tchumim.com/post/23435</guid><dc:creator><![CDATA[dovid]]></dc:creator><pubDate>Thu, 26 Apr 2018 11:12:27 GMT</pubDate></item><item><title><![CDATA[Reply to עבודה עם ריבוי תוצאות MySQL מתוך Asterisk on Thu, 26 Apr 2018 10:49:35 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/dovid">@<bdi>dovid</bdi></a><br />
נניח יש לי מערכת מכירות טלפונית עם כמות מוצרים לא קבועה,<br />
ואני רוצה לאפשר למתקשר פשוט לשמוע את כל המוצרים לפי סדר.</p>
<p dir="auto">אני נותן שאילתא של SELECT * FROM table,<br />
כל הטבלה קומפלט נכנסת לתוך משתנה בשם result נניח,<br />
ואז ה Fetch עושה Parse רק לשורה הראשונה ומפריד את העמודות לתוך משתנים, לדוגמא: שם מוצר, קוד, מחיר וכדו'.<br />
אני משמיע למתקשר את תכולת המשתנים שהתקבלה.<br />
זהו הוא שמע. עכשיו הוא בוחר נניח ב: "למעבר למוצר הבא, הקישו X". מה אני עושה איתו?<br />
אז למעשה, אם אני חוזר שוב פעם על אותה פעולת Fetch <strong>בדיוק בלי שום שינוי</strong> -<br />
הוא ידרוס את הערכים הקודמים של שורה 1 ששמורים במשתנים, ובמקומם יכניס את הערכים של שורה 2.<br />
טוב. המתקשר שמע את גם את שורה 2.<br />
<strong>אבל הפעם המתקשר החליט לאתגר אותי ובחר ב: "לחזרה למוצר הקודם, הקישו X".<br />
מה אני עושה איתו עכשיו?</strong></p>
]]></description><link>https://tchumim.com/post/23428</link><guid isPermaLink="true">https://tchumim.com/post/23428</guid><dc:creator><![CDATA[איש אחד]]></dc:creator><pubDate>Thu, 26 Apr 2018 10:49:35 GMT</pubDate></item><item><title><![CDATA[Reply to עבודה עם ריבוי תוצאות MySQL מתוך Asterisk on Thu, 26 Apr 2018 10:24:23 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/%D7%90%D7%99%D7%A9-%D7%90%D7%97%D7%93">@<bdi>איש-אחד</bdi></a> אמר ב<a href="/post/23422">עבודה עם ריבוי תוצאות MySQL מתוך Asterisk</a>:</p>
<blockquote>
<p dir="auto"><strong>אגב, בדוגמא שציטטת (<a class="plugin-mentions-user plugin-mentions-a" href="/user/dovid">@<bdi>dovid</bdi></a>),</strong><br />
היא רק ממחישה את הבעייה שלי - חוסר יכולת בניווט קדימה אחורה.<br />
מה שקורה שם, זה בשורה הראשונה ה Fetch שומר את התוצאה במשתנה בשם number,<br />
בשורה השלישית הוא רושם אותו בפלט של האסטריסק (ובקבצי הלוג),<br />
ובשורה הרביעית הוא מחזיר בלופ לשורה הראשונה שבתורה דורסת את number בלי שום נקיפות מצפון...</p>
</blockquote>
<p dir="auto">אולי אני לא מרוכז, אבל לדעתי אם יש לך לולאה, ויש לך אפשרות לשמור משתנה, אין שום צורך ב"ניווט אחורה".<br />
תן ציור תיאורטי שזה לא אפשרי.</p>
]]></description><link>https://tchumim.com/post/23424</link><guid isPermaLink="true">https://tchumim.com/post/23424</guid><dc:creator><![CDATA[dovid]]></dc:creator><pubDate>Thu, 26 Apr 2018 10:24:23 GMT</pubDate></item><item><title><![CDATA[Reply to עבודה עם ריבוי תוצאות MySQL מתוך Asterisk on Thu, 26 Apr 2018 10:10:10 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/dovid">@<bdi>dovid</bdi></a><br />
בחישוב ביצועים אני לא מבין בכלל, תודה שהמלצת על דרך יותר טובה!<br />
ו <a class="plugin-mentions-user plugin-mentions-a" href="/user/clickone">@<bdi>clickone</bdi></a> , תודה רבה גם על העזרה כאן וגם "מאחורי הקלעים"!</p>
<p dir="auto"><strong>אגב, בדוגמא שציטטת (<a class="plugin-mentions-user plugin-mentions-a" href="/user/dovid">@<bdi>dovid</bdi></a>),</strong><br />
היא רק ממחישה את הבעייה שלי - חוסר יכולת בניווט קדימה אחורה.<br />
מה שקורה שם, זה בשורה הראשונה ה Fetch שומר את התוצאה במשתנה בשם number,<br />
בשורה השלישית הוא רושם אותו בפלט של האסטריסק (ובקבצי הלוג),<br />
ובשורה הרביעית הוא מחזיר בלופ לשורה הראשונה שבתורה דורסת את number בלי שום נקיפות מצפון...</p>
]]></description><link>https://tchumim.com/post/23422</link><guid isPermaLink="true">https://tchumim.com/post/23422</guid><dc:creator><![CDATA[איש אחד]]></dc:creator><pubDate>Thu, 26 Apr 2018 10:10:10 GMT</pubDate></item><item><title><![CDATA[Reply to עבודה עם ריבוי תוצאות MySQL מתוך Asterisk on Thu, 26 Apr 2018 09:39:38 GMT]]></title><description><![CDATA[<p dir="auto">הרעיון שלך יעבוד אבל הוא קרוע מבחינת ביצועים, כבר עדיף את העבודה השחורה שרצית להימנע ממנה (שאילתה מקוננת, שהעליונה תופסת ID בתנאי ש(שאילתה-בת בודקת את זו שקטן ממנו) וכדומה). אישית אני לא חושב שזו עבודה שחורה, אבל זה ממש לא נח לחיות אם כאלה סיבוכים.</p>
<p dir="auto">שים לב שבדוגמה הרשמית שלהם יש לולאה, כזו:</p>
<pre><code>exten =&gt; 888,n(fetchrow),MYSQL(Fetch foundRow ${resultid} number) ; fetch row
exten =&gt; 888,n,GotoIf($[“${foundRow}” = “1”]?done) ; leave loop if no row found
exten =&gt; 888,n,NoOp(${number})
exten =&gt; 888,n,Goto(fetchrow) ; continue loop if row found
exten =&gt; 888,n(done),MYSQL(Clear ${resultid})
</code></pre>
<p dir="auto">בעיקרון כל שפת תכנות בעולם נראית בlow level ככה, אז גם אתה עם קצת ראש יכול להפיק מזה הכל.<br />
למשל במקרה שלך תוכל לשים כל פעם את התוצאה של השורה הקודמת במשתנה בשם previusrow ולבדוק אותו.</p>
]]></description><link>https://tchumim.com/post/23419</link><guid isPermaLink="true">https://tchumim.com/post/23419</guid><dc:creator><![CDATA[dovid]]></dc:creator><pubDate>Thu, 26 Apr 2018 09:39:38 GMT</pubDate></item><item><title><![CDATA[Reply to עבודה עם ריבוי תוצאות MySQL מתוך Asterisk on Thu, 26 Apr 2018 09:25:44 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/dovid">@<bdi>dovid</bdi></a><br />
תודה על התשובה!</p>
<p dir="auto">כמו שציינת בעצמך, אכן, כל תכונה מינימלית שנתמכת בשפת החרטומים הזו - זה נס,<br />
ולצפות לתמיכה במערכים בשפה הזו, זה כנראה ישאר משאלת לב...</p>
<p dir="auto">מה גם, שלפעמים אני רוצה שאילתא גדולה, למשל, שישמיע את כל ה"מוצרים" (שורות בטבלה) אחד אחרי השני.<br />
ולהעתיק את כל הדטהבייס קומפלט לתוך המערך - נראה לי לא יותר מידי פרקטי.</p>
<p dir="auto"><strong>עלה לי עכשיו רעיון, ואשמח לשמוע עליו ביקורת - אם מגיע לו כזאת,</strong><br />
כשאני כותב שאילתא, להוסיף לה <strong>LIMIT 0,2</strong>, דהיינו שישלוף עד 2 התאמות, ויתחיל מההתאמה הראשונה,<br />
כשהערך 0 שממנו מתחילים לקבל את ההתאמות, יתקבל מתוך משתנה.<br />
לאחר ביצוע השאילתא אני עושה סיבוב ראשון של ה "Fetch" כרגיל ומקבל את כל הערכים,<br />
ואז אני עושה עוד סיבוב אחד של "Fetch" - רק בשביל לוודא שהוא לא NULL (דהיינו, שקיימות התאמות נוספות).<br />
במידה ואכן קיימות התאמות נוספות,<br />
כשאבקש לזוז קדימה / אחורה - אעדכן בהתאם את המשתנה שממנו ה LIMIT מתחיל להחזיר תוצאות,<br />
ופשוט אבצע את השאילתא שוב, כשהפעם ה LIMIT מתחיל לשלוף את 2 ההתאמות מ -1 במקום מ - 0, וכן הלאה.</p>
<p dir="auto"><strong>מה אתם אומרים?</strong></p>
]]></description><link>https://tchumim.com/post/23418</link><guid isPermaLink="true">https://tchumim.com/post/23418</guid><dc:creator><![CDATA[איש אחד]]></dc:creator><pubDate>Thu, 26 Apr 2018 09:25:44 GMT</pubDate></item><item><title><![CDATA[Reply to עבודה עם ריבוי תוצאות MySQL מתוך Asterisk on Thu, 26 Apr 2018 09:27:45 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/%D7%90%D7%99%D7%A9-%D7%90%D7%97%D7%93">@<bdi>איש-אחד</bdi></a> זה dialplan קלאסי?<br />
למה שלא תשתמש <a href="https://www.voip-info.org/asterisk-cmd-agi" target="_blank" rel="noopener noreferrer nofollow ugc">בphpagi</a> הרבה הרבה יותר הגיוני ופשוט.</p>
<p dir="auto">דוגמא:<br />
<a href="https://www.voip-info.org/asterisk-simple-php-lookup-mysql-database-to-set-callerid-name/" target="_blank" rel="noopener noreferrer nofollow ugc">https://www.voip-info.org/asterisk-simple-php-lookup-mysql-database-to-set-callerid-name/</a></p>
<p dir="auto">עוד דוגמא</p>
<pre><code>#!/usr/bin/env php


&lt;?php
//echo "run";
  set_time_limit(30);
  require('phpagi.php');
  error_reporting(E_ALL);
  $agi = new AGI();
  $agi-&gt;answer();
$cid = $agi-&gt;parse_callerid();
//$agi-&gt;say_number("$cid"); // speaks the number 1234

  fwrite(STDOUT, "NOOP $cid ");
  fflush($agi);
$ani = $agi-&gt;request['agi_callerid'];
 $agi-&gt;noop("My CalleID: &lt;&lt;&lt;&lt;&lt;&lt;&lt;=".$ani);
$agi-&gt;say_digits("1234")
//  fwrite(STDOUT, "SAY DIGITS 5551212 '125#'");
//  fflush($agi);

//saynumber("1234");
//  $agi-&gt;text2wav('Goodbye');
//$agi-&gt;stream_file('vm-isunavail.gsm');
//$agi-&gt;say_number("0548486354"); // speaks the number 1234

  $agi-&gt;hangup();
?&gt;

</code></pre>
<p dir="auto">מאז ש"גיליתי" אותו אני עובד רק איתו.<br />
השיחה פשוט מפנה לAGI ומשם הכל פשוט. כולל תנאים סוויצשים וכל מה שזז...<br />
זה PHP קלאסי.</p>
<p dir="auto">אם אתה צריך עזרה בזה אז תכתוב כאן</p>
<p dir="auto">עריכה: <a class="plugin-mentions-user plugin-mentions-a" href="/user/%D7%90%D7%99%D7%A9-%D7%90%D7%97%D7%93">@<bdi>איש-אחד</bdi></a> סורי שעד שלחצתי "שלח" הספקת לכתוב את המגילה... <img src="https://tchumim.com/assets/plugins/nodebb-plugin-emoji/emoji/android/1f642.png?v=9d71ebe86e6" class="not-responsive emoji emoji-android emoji--slightly_smiling_face" style="height:23px;width:auto;vertical-align:middle" title=":)" alt="🙂" /><br />
זה היה כתוב כבר ממזמן. רק שכחתי ללחוץ שלח... <img src="https://tchumim.com/assets/plugins/nodebb-plugin-emoji/emoji/android/1f61e.png?v=9d71ebe86e6" class="not-responsive emoji emoji-android emoji--disappointed" style="height:23px;width:auto;vertical-align:middle" title=":(" alt="😞" /></p>
]]></description><link>https://tchumim.com/post/23417</link><guid isPermaLink="true">https://tchumim.com/post/23417</guid><dc:creator><![CDATA[clickone]]></dc:creator><pubDate>Thu, 26 Apr 2018 09:27:45 GMT</pubDate></item><item><title><![CDATA[Reply to עבודה עם ריבוי תוצאות MySQL מתוך Asterisk on Thu, 26 Apr 2018 04:59:23 GMT]]></title><description><![CDATA[<p dir="auto">יש פה איזה תכנון שלא הכי מריח לי, אבל נתחיל בזה שfetch קורא ישר מהזרם שמגיע מהDB ולכן לא שייך בו אחורה, וגם כדאי "לגמור איתו" כמה שיותר מהר כדי לנקות את הקונקשיין.<br />
בשביל לטייל אחורה על כרחך אתה צריך לשים את התוצאות במערך, שכל שלב אתה מוסיך איבר, עד לשלב בו הfetch מחזיר null.<br />
איך עושים מערך ואיך מנווטים בו בחיה הזו? אין לי מושג ואני נורא מעריך את מתכנתי העל שמבינים את שפת החרטומים הזו.</p>
]]></description><link>https://tchumim.com/post/23357</link><guid isPermaLink="true">https://tchumim.com/post/23357</guid><dc:creator><![CDATA[dovid]]></dc:creator><pubDate>Thu, 26 Apr 2018 04:59:23 GMT</pubDate></item></channel></rss>