Jump to content
xisto Community
manuraj.dhanda

Mysql Query Question MySQL Select query problem

Recommended Posts

Hii Guyz,I am having this little problem creating a query in MySQL.Problem description:Table: mytableTable Structure:IssueId | ToolName | Status01 | Tool1 | Open02 | Tool1 | Closed03 | Tool2 | Closed04 | Tool3 | OpenNow, I want to get the results in the following form:ToolName | Count(Open) | Count(Closed)For the above input, result will be:Tool1 | 1 | 1Tool2 | 0 | 1Tool3 | 1 | 0There should be NO duplicate toolName in output.Thnaks,Manu.

Share this post


Link to post
Share on other sites

Use the following code to create the Table structure. It is better to create the Status field as bit which can have only two values/states 0 and 1.

 

CREATE TABLE mytable(IssueId INT AUTO_INCREMENT PRIMARY KEY,ToolName VARCHAR(15) NOT NULL,Status BIT)

For inserting values use queries similar to:-

 

INSERT INTO mytable VALUES('', 'Tool1', 1);INSERT INTO mytable VALUES('', 'Tool1', 0);INSERT INTO mytable VALUES('', 'Tool2', 0);INSERT INTO mytable VALUES('', 'Tool3', 1);

0 is equivalent to Closed and 1 to Open

 

To retrieve your result use the following query:-

 

SELECT DISTINCT ToolName, (SELECT COUNT(Status) FROM mytable t2 WHERE Status = '1' AND t1.ToolName = t2.ToolName), (SELECT COUNT(Status) FROM mytable t2 WHERE Status = '0' AND t1.ToolName = t2.ToolName)  FROM mytable t1

It contains two subqueries to do the job.

 

Given below are codes for implementing the Status as a normal VARCHAR but I would recommend using the BIT data type.

 

Table Structure

 

CREATE TABLE mytable(IssueId INT AUTO_INCREMENT PRIMARY KEY,ToolName VARCHAR(15) NOT NULL,Status VARCHAR(6))

Data Insertion

 

INSERT INTO mytable VALUES('', 'Tool1', 'Open');INSERT INTO mytable VALUES('', 'Tool1', 'Closed');INSERT INTO mytable VALUES('', 'Tool2', 'Closed');INSERT INTO mytable VALUES('', 'Tool3', 'Open');

Data Output

 

SELECT DISTINCT ToolName, (SELECT COUNT(Status) FROM mytable t2 WHERE Status = 'Open' AND t1.ToolName = t2.ToolName), (SELECT COUNT(Status) FROM mytable t2 WHERE Status = 'Closed' AND t1.ToolName = t2.ToolName)  FROM mytable t1

Edited by turbopowerdmaxsteel (see edit history)

Share this post


Link to post
Share on other sites

SELECT `ToolName`, SUM(Status=1), SUM(Status=0) FROM `tools` GROUP BY `ToolName` ORDER BY `ToolName` ASCI find this as easier than using sub queries

Share this post


Link to post
Share on other sites

in your .php

<?php$con = mysql_connect("hostname","user","pass");if (!$con)  {  die('Could not connect: ' . mysql_error());  }//Create your databasemysql_query("CREATE DATABASE database-name ",$con);//Create your tablemysql_select_db("database-name", $con);$sql = "CREATE TABLE my_table(IssueId INT AUTO_INCREMENT PRIMARY KEY, ToolName VARCHAR(15) NOT NULL, Status VARCHAR(6))";//insertmysql_query("INSERT INTO my-table (IssueId, ToolName, Status) VALUES ('...', '...',...)")VALUES ('...', '...',...) ... VALUES('...','...','...')");

Edited by yordan
added the code tag (see edit history)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

Terms of Use | Privacy Policy | Guidelines | We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.