Home Php C# Sql C C++ Javascript Python Java Go Android Git Linux Asp.net Django .net Node.js Ios Xcode Cocoa Iphone Mysql Tomcat Mongodb Bash Objective-c Scala Visual-studio Apache Elasticsearch Jar Eclipse Jquery Ruby-on-rails Ruby Rubygems Android-studio Spring Lua Sqlite Emacs Ubuntu Perl Docker Swift Amazon-web-services Svn Html Ajax Xml Java-ee Maven Intellij-idea Rvm Macos Unix Css Ipad Postgresql Css3 Json Windows-server Vue.js Typescript Oracle Hibernate Internet-explorer Github Tensorflow Laravel Symfony Redis Html5 Google-app-engine Nginx Firefox Sqlalchemy Lucene Erlang Flask Vim Solr Webview Facebook Zend-framework Virtualenv Nosql Ide Twitter Safari Flutter Bundle Phonegap Centos Sphinx Actionscript Tornado Register | Login | Edit Tags | New Questions | 繁体 | 简体


10 questions online user: 7

0
votes
answers
37 views
+10

如何在PHP和MySQL中爲不同的登錄用戶分配不同範圍的聯繫人

-1

我正在嘗試在php和mysql中創建一個簡單的CRM。但卡住了一部分。 我有一張可以同時登錄的用戶表,並且一次訪問聯繫人表。但是我想給他們分配不同的數據範圍。例如:如果「」,「」 &「ç」的所有日誌,在相同的時間和訪問前端表「聯繫人」,我想
」至顯示數據來自1-500
'B' - 501-1000。 &
ç」 - 1001-1500如何在PHP和MySQL中爲不同的登錄用戶分配不同範圍的聯繫人

如果有人能幫助我在正確的方向如何做到這一點,我會很感激。

+0

這是一個非常普遍的問題......你應該嘗試一些事情,然後回來更具體的問題。一般來說,在這裏不要求別人解決一般的編程問題。你需要先嚐試自己解決它。 – Serge

+0

我用COUNT和LIMIT嘗試了不同的方法,並加入了表格但沒有運氣。我只想要一些指導繼續。如果我們迷路了,我們一般不會問路嗎? – Tarun

+0

必須知道更多詳細信息,例如您如何確定每個人獲得500是否因爲有1500/3個登錄人員?你只是按照字母順序分配它們,這些東西必須在任何人試圖幫助你之前定義。 –

沙发
0
0

終於找出來了。

我在默認值爲'0'的聯繫人表中創建了名爲'assigned_to'的三個輸入字段和一個列。 字段是 -

  1. 爲僱員ID選擇字段
  2. 分鐘(輸入[類型=文本])範圍字段
  3. 最大(輸入[類型=文本])範圍字段

我使用查詢填充了MIN範圍和MAX範圍字段

select MIN(id) as minid from contacts_table WHERE assigned_to=0 
select MAX(id) as maxid from contacts_table WHERE assigned_to=0 

然後,在表單發佈後,我插入了employee_id在聯繫人表的assigned_to列中。

<?php if (isset($_POST['assign'])) { 
     $sel_emp = $_POST['sel_emp']; 
     $min_range = $_POST['min_range']; 
     $max_range = $_POST['max_range']; 
     $sqli = "UPDATE contacts_table SET `assigned_to`='$sel_emp' WHERE `assigned_to`='0' AND id BETWEEN '$min_range' AND '$max_range'"; 
     if (mysqli_query($conn, $sqli)) { 
      ?> 
      <script> 
       $("#msg").html("Assigned"); 
       $("#msg").css('color', 'green'); 
      </script> 
      <?php 
     } else { 
      echo mysqli_error($conn); 
     } 
     } ?> 

因此,基本上,執行上述主查詢所述操作是

UPDATE leads SET `assigned_to`='251' WHERE `assigned_to`='0' AND id BETWEEN '1' AND '500' 

此更新assigned_to值與EMPLOYEE_ID是251

如果任何人都能夠提供更好的解決方案。我會非常感謝。

0
votes
answers
35 views
+10

MySQL的:獲取匹配的所有行的數量,以及與結果集

0

如果你看一下my fiddle,你可以看到,我運行一個查詢,並試圖讓所有匹配行的計數,結果集一起。MySQL的:獲取匹配的所有行的數量,以及與結果集

我想要得到的相匹配的所有行計數,雖然我可能只返回結果集其中的一小部分,因爲我在做分頁與LIMITOFFSET

我的查詢出了什麼問題?

SELECT item.*, COUNT(item.id) AS _count 
FROM item 
JOIN user 
    ON user.username = "Lansana" 
    AND user.deleted_at IS NULL 
JOIN user_item 
    ON user_item.item_id = item.id 
    AND user_item.user_id = user.id 
    AND user_item.deleted_at IS NULL 
WHERE item.deleted_at IS NULL 
GROUP BY item.id 
ORDER BY item.id DESC 
沙发
0
1

您所做的是在聚合查詢中將您的查詢。在大多數數據庫(以及最近的MySQL版本),你會得到一個錯誤 - 因爲select還沒有在group by未聚集列。

沒有group by恰好返回一行全部聚集查詢。

如果你想要的行數,然後用CALC_FOUND_ROWS(記錄here):

SELECT SQL_CALC_FOUND_ROWS item.* 
. . . ; 

然後發出另一個查詢:

SELECT FOUND_ROWS(); 
+0

發現的行,是不是我要找的。我想獲得匹配的所有*行的數量,但是我可能只返回一小部分結果集,因爲我正在用LIMIT和OFFSET分頁。編輯的問題更清楚。 – Lansana

+0

@Lansana。 。 。那麼'SQL_CALC_FOUND_ROWS'就是*你正在尋找的東西。您是否閱讀過文檔? 「第二個SELECT返回一個數字,表示在沒有LIMIT子句的情況下,第一個SELECT將返回多少行。」 –

+0

啊,你是對的!我讀錯了。謝謝一堆! – Lansana

0
votes
answers
43 views
+10

允許在可裁剪環境中編輯日期時間值的最佳方法?

1

我使用Jeditable來允許編輯我的頁面上的表格。它更新了一個MySQL表,它一切正常。允許在可裁剪環境中編輯日期時間值的最佳方法?

我想添加編輯日期時間值的功能。所以我嘗試使用jquery.jeditable.datepicker.js來完成這項工作。但它只適用於日期值而不是日期時間值。

$('.editTimeIn').editable('save.php', { 
    type  : 'datepicker', 
     datepicker: { 
      dateFormat: 'yy-mm-dd', 
      numberOfMonths: 2 
     } 
}); 

我需要能夠讓用戶選擇日期和時間。你對這個功能有什麼建議? 如果可能請使用示例。

+1

看看[這個答案](https://stackoverflow.com/questions/642136/jeditable-with-jquery-ui-datepicker#1406886)+它下面的第二個評論。 –

沙发
0
1

jeditable文檔。

(字符串)類型:要使用的輸入類型。默認的輸入類型是文本textarea的選擇。其他輸入類型使用自定義的 輸入類型API提供。

所以,如果你在jeditable additional input types仔細看,你會看到,你可以使用

timepicker類型(timepicker依賴)

一個time輸入類型(可能這是您需要的最佳方式東西很快,沒有任何其他插件依賴)。

time輸入類型的一個簡單的例子可以在本fiddle

EDIT找到

您也可以嘗試通過添加datetime-local輸入類型,例如下面延伸附加輸入類型(只是一個簡單演示)

$.editable.addInputType('datetime', { 
/* Create input element. */ 
element : function(settings, original) { 
    // pattern is fallback for browsers not supporting datetime-local 
    var datetime_local = $('<input id="datetime_" type="datetime-local" pattern="[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}" required />'); 
    $(this).append(datetime_local);   
var hidden = $('<input type="hidden">'); 
$(this).append(hidden); 
return(hidden); 
}, 
submit : function(settings, original) { 
    var value = $('input:#datetime_').val(); 
    $("input", this).val(value); 
} 
}); 

請檢查更新的fiddle也查看更改

+0

HI #Peter Darmis這正是我正在尋找的。然而,與日期小提琴不起作用。編輯的結尾必須有一個值,如2017-12-15 09:15:00你能告訴我如何在小提琴中做到這一點? –

+0

@KeithDKaiser如果您的意思是當您提交表單時日期值未定義,請檢查更新。 –

+0

任何方式使用下拉或其他方法來選擇日期和時間(類似於你在第一個小提琴中做什麼)? –

板凳
0
0

直接從source file可jeditable。看看fie的結尾

if (settings.datepicker) { 
    jQuery.extend(datepicker, settings.datepicker); 
    } 

    input.datepicker(datepicker); 

它實際上在做什麼是將jquery ui datepicker應用到您的輸入元素。

JQuery ui Datepicker沒有能力改變日期時間。 或者,你可以找到另一個支持這個庫。或者你可以在github上申請jeditable developers的功能。

我建議你找到任何其他庫,因爲我懷疑開發者會幫助你,因爲他們工作了六七年。你不應該使用折舊的庫。

0
votes
answers
52 views
+10

平面文件作爲輸入 - MySQL最佳實踐

0

我每天都會收到一個平面文件(CSV),其內容會被導入到我的數據庫中(而不是通過Web表單,POS等的數據輸入)。有一個記錄中有40個字段,我有600,000個獨特的記錄。平面文件作爲輸入 - MySQL最佳實踐

到目前爲止,我還沒有看到有必要將這個關係數據庫作爲關係數據庫,儘管肯定會有一些規範化使它更有效;重複的產品,商店,客戶,經銷商等

如果我從一開始就開始並以某種方式逐步輸入數據,我會知道如何做到這一切(我經歷的每一個資源都涵蓋了但是當你有大量的數據並且需要使它成爲關係時,沒有一種方法可以覆蓋它)。並且隨着CVS每天到來,我不太清楚在數據庫建立後如何導入數據。如果我將這40個字段分成5個表格,那麼我必須以同樣的方式拆分每日文件並一次導入它們一個嗎?外鍵會以這種方式更新嗎?

如果有人能把我推向正確的方向,我會去做更多的自己挖掘。

如果您遇到同一個項目,您將如何創建這樣的數據庫並執行每日更新?

謝謝!

沙发
0
0

獨立於您現在所擁有的(CSV結構和數據)創建數據庫結構。例如。組織你的桌子以適應你未來的需求,思考和定義好他們之間的關係,運用適當的指標。

作爲第二步 - 在我看來是不可避免的,用你自己的編程語言編寫一個小程序。它應該能夠

  • 主要是讀從(CSV)文件中的記錄/行,
  • 驗證/消毒獲取的數據
  • 進口/根據需要保存在數據庫中對應表中的數據。 「根據需要」,我的意思是說,隨着時間的推移,可能會出現許多因素,這些因素可能會意外地影響您的第一個數據庫結構決策。例如,需要一些時態表。另外,您應該從觸發器和存儲過程給您帶來的好處中受益。
  • 正確處理導入過程中引發的錯誤和異常。例如,由於最終的「重複密鑰」問題 - 因爲文件中的數據可能容易出錯,所以某些記錄無法在某一天導入。這並不意味着進口應該打破。閱讀一條記錄,嘗試保存它。如果出現問題,處理它(複製另一個文件中的行,或將它保存在一個特殊的表中,以供以後編輯/修訂並重新導入),並讓程序按照其過程中的下一個記錄。
  • 正確記錄所有(主要)操作並維護讀取計數器和有問題的記錄。
  • 自動將每個日常文件 - 導入後 - 複製到備份目錄中,直到它不再需要爲止。
  • 最終會通過電子郵件向您發出有關操作狀態的信號。

第三步是找到一個自動化整個循環的解決方案。例如,要找到一個任務/ cron-jobs管理器來每天啓動一次或每天兩次的程序,而無需手動進行此操作。

關於根據您的數據庫結構將文件拆分爲不同的文件:這不是必要的,例如,這將是一個多餘的步驟,因爲您的程序應該設法讀取文件並相應地處理數據導入。

至於程序的類型:它應該是一個Web解決方案,以便您可以隨時訪問和修改它。

祝你好運。

+0

偉大的輪廓和我正在尋找的方向。謝謝aendeerei! –

0
votes
answers
60 views
+10

Log4j2 JPAAppender BLOB

0

後2天log4j2戰鬥,Hibernate和Spring我終於JPAAppender工作..排序的..Log4j2 JPAAppender BLOB

我跟着這個例子:http://logging.apache.org/log4j/2.x/manual/appenders.html#JPAAppender

例子中的類創建一個表有這個結構:

CREATE TABLE `applicationLog` (
    `id` bigint(20) NOT NULL AUTO_INCREMENT, 
    `wrappedEvent` tinyblob, 
    PRIMARY KEY (`id`) 
) 

第一個問題是我不能記錄任何東西,因爲tinyblob太小了。我通過將tinyblob更改爲largeblob來手動解決此問題。

第一個問題:有沒有辦法讓類擴展BasicLogEventEntity來自己創建一個largeblob?

第二個問題:如何使用mysql客戶端讀取wrappedEvent?如何從日誌中獲取日誌的純文本?

感謝

沙发
0
0

所以我改變了實體如下,現在在db斑點總是空的(我並不需要它了),在其他列逐漸加入可讀的信息。這只是一個解決方法,但它是我能想到的最好的...

import java.time.Instant; 
import java.time.LocalDateTime; 
import java.time.ZoneId; 
import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.Table; 
import lombok.Getter; 
import lombok.Setter; 
import org.apache.commons.lang3.exception.ExceptionUtils; 
import org.apache.logging.log4j.core.LogEvent; 
import org.apache.logging.log4j.core.appender.db.jpa.BasicLogEventEntity; 
import org.hibernate.annotations.Type; 

/** 
* 
* @author syco 
*/ 
@Entity(name = "applicationLog") 
@Table(name = "`applicationLog`") 
public class ApplicationLog extends BasicLogEventEntity { 

    @Getter 
    @Setter 
    @Column(name = "`customEventDate`") 
    private LocalDateTime customEventDate; 

    @Getter 
    @Setter 
    @Column(name = "`customException`") 
    @Type(type = "text") 
    private String customException; 

    @Getter 
    @Setter 
    @Column(name = "`customLevel`", length = 512) 
    private String customLevel; 

    @Getter 
    @Setter 
    @Column(name = "`customLogger`", length = 512) 
    private String customLogger; 

    @Getter 
    @Setter 
    @Column(name = "`customMessage`") 
    @Type(type = "text") 
    private String customMessage; 

    @Getter 
    @Setter 
    @Column(name = "`customThreadName`", length = 512) 
    private String customThreadName; 

    @Getter 
    @Setter 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name = "`id`") 
    private long id; 

    public ApplicationLog() { 
    super(); 
    } 

    public ApplicationLog(LogEvent logEvent) { 
    super(); 
    if (logEvent != null) { 
     setCustomEventDate(Instant.ofEpochMilli(logEvent.getTimeMillis()).atZone(ZoneId.systemDefault()).toLocalDateTime()); 
     if (logEvent.getThrown() != null) { 
     setCustomException(ExceptionUtils.getStackTrace(logEvent.getThrown())); 
     } 
     if (logEvent.getLevel() != null) { 
     setCustomLevel(logEvent.getLevel().name()); 
     } 
     setCustomLogger(logEvent.getLoggerName()); 
     if (logEvent.getMessage() != null) { 
     setCustomMessage(logEvent.getMessage().toString()); 
     } 
     setCustomThreadName(logEvent.getThreadName()); 
    } 
    } 
} 
0
votes
answers
37 views
+10

PHP - Mysql的準備不會執行

0

我想用一個名爲editable grid(http://www.editablegrid.net/en/)的工具創建mysql條目。我剛剛在代碼中添加了2個textfields ..但它看起來像mysql準備代碼不喜歡我在做什麼。PHP - Mysql的準備不會執行

多數民衆贊成在PHP代碼:

require_once('config.php');   

// Database connection         
$mysqli = mysqli_init(); 
$mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT, 5); 
$mysqli->real_connect($config['db_host'],$config['db_user'],$config['db_password'],$config['db_name']); 

// Get all parameter provided by the javascript 
$name = $mysqli->real_escape_string(strip_tags($_POST['name'])); 
$firstname = $mysqli->real_escape_string(strip_tags($_POST['firstname'])); 
$uid = $mysqli->real_escape_string(strip_tags($_POST['uid'])); 
$show = $mysqli->real_escape_string(strip_tags($_POST['show'])); 
$tablename = $mysqli->real_escape_string(strip_tags($_POST['tablename'])); 

$return=false; 
if ($stmt = $mysqli->prepare("INSERT INTO ".$tablename." (name, firstname, uid, show) VALUES ( ?, ?, ?, ?)")) { 

    $stmt->bind_param("ssss", $name, $firstname, $uid, $show); 
    $return = $stmt->execute(); 
    $stmt->close(); 
}    
$mysqli->close();   

echo $return ? "ok" : "error"; 

這裏的HTML代碼:

<div id="addform" style="height:210px;"> 

      <div class="row"> 
       <input type="text" id="name" name="name" placeholder="name" /> 
      </div> 

      <div class="row"> 
       <input type="text" id="firstname" name="firstname" placeholder="firstname" /> 
      </div> 
      <div class="row"> 
       <input type="text" id="uid" name="uid" placeholder="uid" /> 
      </div> 

      <div class="row"> 
       <input type="text" id="show" name="show" placeholder="show" /> 
       </div> 

      <div class="row tright"> 
       <a id="addbutton" class="button green" ><i class="fa fa-save"></i> Apply</a> 
       <a id="cancelbutton" class="button delete">Cancel</a> 
      </div> 
     </div> 

他們都是使用JavaScript和這個工作連接在一起。我剛剛添加了2個文本框。在PHP代碼中出現錯誤。 Arent在準備聲明中允許使用4個值?

+0

不要逃避和參數,只是參數。不要越過表名,使用允許名稱的白名單。當你執行發生的事情時,你會得到一個錯誤嗎? – chris85

沙发
0
0

的代碼看起來正確的,但沒有定義的變量表名,因此添加更多的文本字段的HTML

<div class="row"> 
<input type="text" id="tablename" name="tablename" placeholder="input table name" /> 
</div> 

或者設置表名在PHP

$tablename = 'table name here'; 
+0

我檢查..不影響腳本。還是行不通 – mambu231

0
votes
answers
27 views
+10

創建隊列系統

-2

我想創建一個排隊系統,以這種方式工作:創建隊列系統

  • 用戶填寫一個表格,他們必須輸入一些數據。
  • 點擊發送,這些數據將被保存在一個sql表中。
  • 進入index.php頁面會看到一個包含如下文本的框:在您面前有4個請求,請等待幾分鐘。

我已經試過做這樣的事情,但要創建新的請求消息的數字「4」增長。 這是因爲我創建了一個查詢來計算表上的所有結果。

$query = $mysql->query("SELECT COUNT(*) AS q FROM application_approve");

雖然我希望它只計算髮送用戶請求上述結果。

id name   text  text2 
1 First request dassasad dsadasas 
2 Second request dassasad dsadasas 
3 Third request dsadasdsas dsadasad 

在上面,我想只有多少行有「第二請求」上面來算的例子:在這種情況下,1

+0

請編輯您的問題,並顯示您的表(S)的模式。此外,哪些字段用於選擇用戶的信息,以及哪個字段確定記錄的排序? –

沙发
0
1

假設你的表中有一個PK(id)並參照user_id來確定哪個請求屬於哪個用戶,並且假設每個用戶只有一個請求在隊列中,那麼您的查詢將如下所示。

SELECT COUNT(id) AS q FROM application_approve 
    WHERE id < (
     SELECT id FROM application_approve 
     WHERE user_id = ? 
    ) 

這也假定PK id是一個自動遞增鍵。

鑑於user_id此查詢將返回給定用戶行上方的行數(假設它們有一個),則返回。換句話說,所有的ID都小於給定用戶的ID。

爲簡單起見,我們假設這個模式只有2列(iduser_id):

 

mysql> SELECT * FROM application_approve; 
+------+---------+ 
| id | user_id | 
+------+---------+ 
| 1 |  1 | 
| 2 |  2 | 
| 3 |  3 | 
+------+---------+ 
3 rows in set (0.00 sec) 

因此,在給定的表,有3個用戶,每個用戶在隊列1項。

如果我們想找到哪個位置用戶2是在查詢會給我們以下結果:

 
mysql> SELECT COUNT(id) AS q FROM application_approve WHERE id < (SELECT id FROM application_approve WHERE user_id = 2); 
+---+ 
| q | 
+---+ 
| 1 | 
+---+ 
1 row in set (0.00 sec) 
0
votes
answers
59 views
+10

谷歌雲中的MySQL表無法創建觸發器

1
CREATE TRIGGER trigger_LocationType_Insert 
BEFORE UPDATE ON LocationType 
FOR EACH ROW 
SET NEW.NAME = '' 

返回此錯誤:谷歌雲中的MySQL表無法創建觸發器

[HY000] [1419]你沒有SUPER權限和二進制日誌被啓用,(你的威力*要使用不太安全的log_bin_trust_function_creators變量)

我知道這是因爲即使是root用戶「擁有除SUPER和FILE以外的所有權限」。 https://cloud.google.com/sql/docs/mysql/users

我認爲如果我可以「將log_bin_trust_function_creators設置爲1」,那麼它會工作(該用戶具有CREATE TRIGGER權限)。但是,我不知道如何在Google Cloud SQL控制檯或sql語句中執行此操作。

如何在此環境中創建一個TRIGGER?

+0

嘗試創建與'DEFINER = user'或'DEFINER = CURRENT_USER'讀取(https://dev.mysql.com/doc/refman/5.7/en /create-trigger.html) –

+0

我試過CREATE DEFINER = CURRENT_USER TRIGGER ...沒有任何改變。 – Gary

沙发
0
2

本頁面描述瞭如何修改MySQL的配置選項,谷歌的雲計算實例:https://cloud.google.com/sql/docs/mysql/flags

Select the instance to open its Instance Overview page.

The database flags that have been set are listed under the Database flags section.

你必須使用自己的UI改變全局變量,因爲你不能沒有SUPER權限使用SET GLOBAL

log_bin_trust_function_creators選項列在支持的配置選項中,您可以在上面鏈接的頁面的UI中更改這些選項。

想了解更多關於此錯誤,請參閱https://dev.mysql.com/doc/refman/5.7/en/stored-programs-logging.html

0
votes
answers
35 views
+10

MySql - 如何從兩個表中獲取平均數據?

-1

產品銷往表MySql - 如何從兩個表中獲取平均數據?

舉行購買作爲一個訂單可以有很多產品每一個項目的記錄。

+----+------------+---------+----------+-------+ 
| ID | PAYMENT_ID | PROD_ID | STORE_ID | PRICE | 
+----+------------+---------+----------+-------+ 
| 1 |   1 |  5 |  4 | 3.00 | 
| 2 |   1 |  4 |  4 | 4.00 | 
| 3 |   2 |  3 |  7 | 5.00 | 
| 4 |   3 |  8 |  9 | 10.00 | 
+----+------------+---------+----------+-------+ 

支付表

保持訂單的付款記錄。

+----+-------+------------+----------+ 
| ID | TOTAL | DATE | STORE_ID | 
+----+-------+------------+----------+ 
| 1 | 7.00 | 10/10/2010 |  4 | 
| 2 | 5.00 | 01/07/2011 |  7 | 
| 3 | 10.00 | 20/02/2012 |  9 | 
+----+-------+------------+----------+ 

如何創建查詢或會給我很多銷售是如何在多年2010/2011/2012對於給定的商店取得每月(1至12月)平均的功能。

例如,如果「商店4」在2010年銷售的5種款產品在1月,在2011年和2012年則在一月份那家商店的平均銷售額是5

我想:

SELECT storeid, paymentdate 
FROM payment_table 
WHERE (YEAR(paymentdate)=2010 OR YEAR(paymentdate)=2011 OR YEAR(paymentdate)=2012) 
    AND (storeid=1) 

除了獲得給定商店的所有付款日期之外,這並沒有多大作用。

+0

你到目前爲止試過了什麼? –

+0

@ stephen.vakil'SELECT storeid,paymentdate FROM payment_table WHERE(YEAR(paymentdate)= 2010 or YEAR(paymentdate)= 2011 or YEAR(paymentdate)= 2012) AND(storeid = 1)'獲取給定商店的所有付款日期。 – HoldTight

+0

加入表格,然後使用'COUNT(*)'和'GROUP BY YEAR(日期),MONTH(日期)'來獲得每個月的計數。將它放到子查詢中,並使用'AVG(count)'和'GROUP BY month' – Barmar

沙发
0
1

您需要加入表格才能獲得每個時間段的銷售量。把它放在子查詢中,這樣你可以按月重組它。

SELECT month, AVG(sales) AS avg_sales 
FROM (SELECT MONTH(paymentdate) AS month, YEAR(paymentdate) AS year, COUNT(*) AS sales 
     FROM payment_table AS pay 
     JOIN products_sold_table AS prod ON pay.id = prod.payment_id AND pay.store_id = prod.store_id 
     WHERE YEAR(paymentdate) IN (2010, 2011, 2012) AND pay.store_id = 1 
     GROUP BY month, year 
) AS x 
GROUP BY month 
+0

您能否請編輯答案,以便它返回給定商店的數據,我指定的商店有多個商店。我發現你有'COUNT(*)AS銷售';這怎麼可以用所售產品的總和而不是其價格的總和來代替。 – HoldTight

+0

這不是它的價格總和,它只是連接表中的行數。 – Barmar

+0

價格總和應爲'SUM(價格)' – Barmar

0
votes
answers
53 views
+10

Android工作室註冊按鈕沒有響應排球請求

0

我想在android工作室中使用排球庫和PHP頁面製作註冊腳本。 PHP頁面正常工作,它已經過測試。我在像MySQL這樣的WEBSERVER上擁有它,並且連接很好,並且所有內容都經過了測試。今天我試着做一些應用程序,但我想註冊並登錄。你能告訴我爲什麼沒有反應,當我點擊註冊按鈕?我的代碼在哪裏出錯?我真的很感謝每一個幫助。Android工作室註冊按鈕沒有響應排球請求

import android.content.DialogInterface; 
import android.support.v7.app.AlertDialog; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.Toolbar; 

import com.android.volley.AuthFailureError; 
import com.android.volley.Request; 
import com.android.volley.Response; 
import com.android.volley.VolleyError; 
import com.android.volley.toolbox.StringRequest; 

import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

import java.util.HashMap; 
import java.util.Map; 

public class Register extends AppCompatActivity { 
    Button reg_bn; 
    EditText Name,Email,UserName,Password,ConPassword; 
    String name,email,username,password,conpass; 
    AlertDialog.Builder builder; 
    String reg_url = "https://prchy.ic.cz/register.php"; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_register); 
     reg_bn = (Button)findViewById(R.id.bn_reg); 
     Name = (EditText)findViewById(R.id.reg_name); 
     Email = (EditText)findViewById(R.id.reg_email); 
     UserName = (EditText)findViewById(R.id.reg_user_name); 
     Password = (EditText)findViewById(R.id.reg_password); 
     ConPassword = (EditText)findViewById(R.id.reg_con_password); 
     builder = new AlertDialog.Builder(Register.this); 
     reg_bn.setOnClickListener(new View.OnClickListener(){ 
      @Override 
      public void onClick(View v) { 
       name = Name.getText().toString(); 
       email = Email.getText().toString(); 
       username = UserName.getText().toString(); 
       password = Password.getText().toString(); 
       conpass = ConPassword.getText().toString(); 
       if(name.equals("")||email.equals("")||username.equals("")||password.equals("")||conpass.equals("")) 
       { 
        builder.setTitle("Něco se pokazilo..."); 
        builder.setMessage("Prosím vyplňte všechny pole."); 
        displayAlert("input_error"); 
       } 
       else { 
        if(!(password.equals(conpass))) 
        { 
         builder.setTitle("Něco se pokazilo..."); 
         builder.setMessage("Vaše hesla se neshodují."); 
         displayAlert("input_error"); 
        } 
        else { 
         StringRequest stringRequest = new StringRequest(Request.Method.POST, reg_url, 
           new Response.Listener<String>() { 
            @Override 
            public void onResponse(String response) { 
             try { 
              JSONArray jsonArray = new JSONArray(response); 
              JSONObject jsonObject = jsonArray.getJSONObject(0); 
              String code = jsonObject.getString("code"); 
              String message = jsonObject.getString("message"); 
              builder.setTitle("Odpově? serveru..."); 
              builder.setMessage(message); 
              displayAlert(code); 
             } catch (JSONException e) { 
              e.printStackTrace(); 
             } 
            } 
           }, new Response.ErrorListener() { 
          @Override 
          public void onErrorResponse(VolleyError error) { 

          } 
         }){ 
          @Override 
          protected Map<String, String> getParams() throws AuthFailureError { 
           Map<String, String> params = new HashMap<String,String>(); 
           params.put("name",name); 
           params.put("email",email); 
           params.put("user_name",username); 
           params.put("password",password); 
           return params; 
          } 
         }; 
         MySingleton.getInstance(Register.this).addToRequestque(stringRequest); 


        } 
        } 
       } 
      }); 

    } 
    public void displayAlert(final String code) 
    { 
    builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialogInterface, int i) { 
      if(code.equals("input_error")) 
      { 
       Password.setText(""); 
       ConPassword.setText(""); 
      } 
      else if(code.equals("reg_success")){ 
       finish(); 
      } 
      else if(code.equals("reg_failed")){ 
       Name.setText(""); 
       UserName.setText(""); 
       Password.setText(""); 
       ConPassword.setText(""); 
      } 
     } 
    }); 
    AlertDialog alertDialog = builder.create(); 
    alertDialog.show(); 
    } 
} 

而且在我的XML文件是

<?xml version="1.0" encoding="utf-8"?> 
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@android:color/holo_blue_light" 
    tools:background="@android:color/holo_blue_light" 
    tools:context="com.example.admin.bongfinalapp.Register"> 

    <EditText 
     android:id="@+id/reg_name" 
     android:layout_width="368dp" 
     android:layout_height="42dp" 
     android:ems="10" 
     android:hint="Vaše jméno" 
     android:inputType="textPersonName" 
     app:layout_constraintBottom_toTopOf="@+id/reg_email" 
     app:layout_constraintEnd_toEndOf="parent" 
     app:layout_constraintEnd_toStartOf="@+id/imageView2" 
     app:layout_constraintHorizontal_bias="0.0" 
     app:layout_constraintStart_toEndOf="@+id/imageView2" 
     app:layout_constraintStart_toStartOf="parent" 
     app:layout_constraintTop_toBottomOf="@+id/imageView2" 
     app:layout_constraintVertical_bias="0.333" /> 

    <EditText 
     android:id="@+id/reg_email" 
     android:layout_width="368dp" 
     android:layout_height="wrap_content" 
     android:ems="10" 
     android:hint="E-Mail" 
     android:inputType="textEmailAddress" 
     app:layout_constraintBottom_toTopOf="@+id/reg_user_name" 
     app:layout_constraintEnd_toEndOf="parent" 
     app:layout_constraintHorizontal_bias="0.5" 
     app:layout_constraintStart_toStartOf="parent" 
     app:layout_constraintTop_toBottomOf="@+id/reg_name" /> 

    <EditText 
     android:id="@+id/reg_user_name" 
     android:layout_width="368dp" 
     android:layout_height="wrap_content" 
     android:ems="10" 
     android:hint="P?ihlašovací jméno" 
     android:inputType="textPersonName" 
     app:layout_constraintBottom_toTopOf="@+id/reg_password" 
     app:layout_constraintEnd_toEndOf="parent" 
     app:layout_constraintHorizontal_bias="0.5" 
     app:layout_constraintStart_toStartOf="parent" 
     app:layout_constraintTop_toBottomOf="@+id/reg_email" 
     app:layout_constraintVertical_bias="0.045" /> 

    <EditText 
     android:id="@+id/reg_password" 
     android:layout_width="368dp" 
     android:layout_height="wrap_content" 
     android:ems="10" 
     android:hint="Heslo" 
     android:inputType="textPassword" 
     app:layout_constraintBottom_toTopOf="@+id/reg_con_password" 
     app:layout_constraintEnd_toEndOf="parent" 
     app:layout_constraintHorizontal_bias="0.5" 
     app:layout_constraintStart_toStartOf="parent" 
     app:layout_constraintTop_toBottomOf="@+id/reg_user_name" 
     app:layout_constraintVertical_bias="0.074" /> 

    <Button 
     android:id="@+id/bn_reg" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Registruj" 
     app:layout_constraintBottom_toBottomOf="parent" 
     app:layout_constraintEnd_toEndOf="parent" 
     app:layout_constraintHorizontal_bias="0.5" 
     app:layout_constraintStart_toStartOf="parent" 
     app:layout_constraintTop_toBottomOf="@+id/reg_con_password" /> 

    <ImageView 
     android:id="@+id/imageView2" 
     android:layout_width="wrap_content" 
     android:layout_height="144dp" 
     app:layout_constraintBottom_toTopOf="@+id/reg_name" 
     app:layout_constraintEnd_toEndOf="parent" 
     app:layout_constraintHorizontal_bias="1.0" 
     app:layout_constraintStart_toStartOf="parent" 
     app:layout_constraintTop_toTopOf="parent" 
     app:srcCompat="@drawable/bong" /> 

    <EditText 
     android:id="@+id/reg_con_password" 
     android:layout_width="368dp" 
     android:layout_height="wrap_content" 
     android:ems="10" 
     android:hint="Potvr? heslo" 
     android:inputType="textPersonName" 
     app:layout_constraintBottom_toTopOf="@+id/bn_reg" 
     app:layout_constraintEnd_toEndOf="parent" 
     app:layout_constraintHorizontal_bias="0.5" 
     app:layout_constraintStart_toStartOf="parent" 
     app:layout_constraintTop_toBottomOf="@+id/reg_password" /> 
</android.support.constraint.ConstraintLayout> 
沙发
0
0

顯示MySingelton類。爲onError添加日誌以檢查您是否收到錯誤