1 Востаннє редагувалося sn7770666k (28.02.2017 23:30:27)

Тема: Запит MySQL

Доброго вечора всім.) Ось моя ЕР діаграма, потрібно вивести Прізвище боксера, і к-сть проведених боїв.
Це я пробував робити, але не получилось.. *WALL*

select b1.SurName,b1.Name,count(boxer_id)
from battle
left join boxer as b1 on battle.Boxer_ID=b1.ID
group by b1.ID
union
select b2.SurName,b2.Name,count(BoxerTwo_ID)
from battle
left join boxer as b2 on battle.BoxerTwo_ID=b2.ID
group by b2.ID;

Допоможіть будь ласка розібратись у ситуації, і підкажіть кращі варіанти реалізації

Post's attachments

Diagram.jpg 75.99 kb, 244 downloads since 2017-02-28 

2

Re: Запит MySQL

Була ж вже така тема!? *PARDON*

Подякували: 221VOLT1

3 Востаннє редагувалося sn7770666k (01.03.2017 09:09:32)

Re: Запит MySQL

Так, була :( У мене виникли проблеми з цієї таблицею  *FACEPALM*  ви можете допомогти з цим? залишилось написати тільки цей запит  *DONT_KNOW*
І я ж вивів потрібну інформацію(запит зверху), тільки потрібно додати ці два значення... як це зробитии? *WALL*  *WALL*

4

Re: Запит MySQL

http://sqlfiddle.com/#!9/19ce3f/1

Подякували: sn7770666k1

5

Re: Запит MySQL

Вибачте, але ви мене не зрозуміли.( Я написав цей запит

select b1.SurName,b1.Name,count(boxer_id)
from battle
left join boxer as b1 on battle.Boxer_ID=b1.ID
group by b1.ID
union
select b2.SurName,b2.Name,count(BoxerTwo_ID)
from battle
left join boxer as b2 on battle.BoxerTwo_ID=b2.ID
group by b2.ID;

Тільки значення у таблиці Battle(поля:Boxer_ID BoxerTwo_ID) повторюються.) Як додати їх, щоб не використовувати об'єднання union?

6

Re: Запит MySQL

Вибачте, але це ви мене не зрозуміли. У вас крива структура. Звісно, ви можете викрутитися, SQL для цього і гнучкий, але без union ніяк не вийде. До речі, вам треба робити union у підзапиті, а потім з нього консолідувати дані по GROUP BY. Ну, хіба що можете курсорами і тимчасовими таблицями погратися, але краще вже union.

7

Re: Запит MySQL

koala написав:

Вибачте, але це ви мене не зрозуміли. У вас крива структура. Звісно, ви можете викрутитися, SQL для цього і гнучкий, але без union ніяк не вийде. До речі, вам треба робити union у підзапиті, а потім з нього консолідувати дані по GROUP BY. Ну, хіба що можете курсорами і тимчасовими таблицями погратися, але краще вже union.

Я зрозумів.) Дуже дякую.)  *THUMBSUP*

8 Востаннє редагувалося iovchynnikov (01.03.2017 10:44:37)

Re: Запит MySQL

А чому не можна зробити:

SELECT ID, NAME, 
  (SELECT COUNT(1) FROM BATTLE BTL WHERE 
     BTL.boxer_one = BX.id
     OR BTL.boxer_two = BX.id) BOXER_BATTLES
  FROM BOXER BX

Чи я неправильно зрозумів завдання?

SELECT BTL.id BATTLE_ID, 
       concat(
           B1.name, ' (', 
           (SELECT COUNT(1) FROM BATTLE BTL WHERE 
               BTL.boxer_one = B1.id
               OR BTL.boxer_two = B1.id), ' battles in total)') BOXER_ONE, 
       'vs', 
       concat(
           B2.name, ' (', 
           (SELECT COUNT(1) FROM BATTLE BTL WHERE 
               BTL.boxer_one = B2.id
               OR BTL.boxer_two = B2.id), ' battles in total)') BOXER_TWO
FROM BATTLE BTL 
       LEFT JOIN BOXER B1 ON BTL.boxer_one=B1.id
       LEFT JOIN BOXER B2 ON BTL.boxer_two=B2.id;

Це звичайно далеко не найшвидший запит, але без "поганого" юніона.

Більше прикладів: http://sqlfiddle.com/#!9/8d8ff1/19

Подякували: koala, sn7770666k, 221VOLT3

9

Re: Запит MySQL

Так.. все так, велике Вам спасибі! *THUMBSUP*  *THUMBSUP*  *THUMBSUP*  *DRINK*

iovchynnikov написав:

А чому не можна зробити:

SELECT ID, NAME, 
  (SELECT COUNT(1) FROM BATTLE BTL WHERE 
     BTL.boxer_one = BX.id
     OR BTL.boxer_two = BX.id) BOXER_BATTLES
  FROM BOXER BX

Чи я неправильно зрозумів завдання?

SELECT BTL.id BATTLE_ID, 
       concat(
           B1.name, ' (', 
           (SELECT COUNT(1) FROM BATTLE BTL WHERE 
               BTL.boxer_one = B1.id
               OR BTL.boxer_two = B1.id), ' battles in total)') BOXER_ONE, 
       'vs', 
       concat(
           B2.name, ' (', 
           (SELECT COUNT(1) FROM BATTLE BTL WHERE 
               BTL.boxer_one = B2.id
               OR BTL.boxer_two = B2.id), ' battles in total)') BOXER_TWO
FROM BATTLE BTL 
       LEFT JOIN BOXER B1 ON BTL.boxer_one=B1.id
       LEFT JOIN BOXER B2 ON BTL.boxer_two=B2.id;

Це звичайно далеко не найшвидший запит, але без "поганого" юніона.

Більше прикладів: http://sqlfiddle.com/#!9/8d8ff1/19

10

Re: Запит MySQL

Ось код

<?
define('HOST', 'localhost');            // адреса серверу 
define('DATABASE', 'student');      // ім'я бази даних
define('USER', 'root');         // ім'я користувача
define('PASSWORD', '');        // пароль
$link = mysqli_connect(HOST, USER, PASSWORD, DATABASE) or 
die("Помилка " . mysqli_error($link));
if(isset($_POST['model']) && isset($_POST['quantity'])&& 
isset($_POST['quantity'])){
// екранування символів для mysql
$model = htmlentities(mysqli_real_escape_string($link, $_POST['model']));
$quantity = (int)($_POST['quantity']);
$price = (int)($_POST['price']);    
$query ="INSERT INTO oc_product VALUES('$model','$quantity','$price')";
$result = mysqli_query($link, $query) or die("Помилка " . mysqli_error($link)); 
if($result){
        echo "<span style='color:blue;'>Дані добавлені</span>";
    }
    // закриваєм підключення
    mysqli_close($link);
} else {
     $model = "";
     $quantity = "";
     $price = "";
}
//(model, quantity, price,
?>
<form method="POST">
<p>Ввидіть модель:<br> 
<input type="text" name="model" value="<?php echo $model;?>" /></p>
<p>Кількість: <br> 
<input type="text" name="quantity" value="<?php echo $quantity ;?>" /></p>
<p>Ціна:<br> 
<input type="text" name="price" value="<?php echo $price;?>" /></p>
<input type="submit" value="Додати">
</form>

який видає таку помилку: Column count doesn't match value count at row 1
Я подивився, в таблиці oc_product 18 стовпчиків. То що ж робити??

11 Востаннє редагувалося Betterthanyou (02.02.2018 03:15:59)

Re: Запит MySQL

Напевно проблема у рядку 14, неправильно створений sql запит

$query ="INSERT INTO oc_product VALUES('$model','$quantity','$price')";

Хоч ви вже вказали назву БД але не мішало б вказати її ще раз в запиті, для того щоб зникла можлива неоднозначність

INSERT INTO [база даних].[таблиця]

дальше потрібно відкрити круглі дужки, в дужках вказати назви стовпців з таблиці, потім слово VALUES і перелік даних що будуть вставлені в таблицю

INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...);

запит має виглядати якось так

$query ="INSERT INTO student.oc_product(model, quantity, price) VALUES('$model','$quantity','$price')";
Подякували: leofun01, 221VOLT2

12

Re: Запит MySQL

Спасибі!! Спрацювало!!

13 Востаннє редагувалося elektryk (03.02.2018 23:46:59)

Re: Запит MySQL

А зараз помилка в десятому рядку. Я підозрюю, що така ж. А як в цьому випадку буде повний запит??

<?php
header('content-type: text/html;charset=utf-8');
define('DB_HOST', 'locflhost');
define('DB_LOGIN', 'root');
define('DB_PASSWORD', '');
define('DB_NAME', 'gbook');
define('ORDERS_LOG', 'orders.log');
$basket = array();/*Корзина покупателя*/
$count = 0;/*Количество товаров в корзине покупателя*/
$link = mysql_connect(DB_HOST,DB_LOGIN,DB_PASSWORD,ORDERS_LOG) or 
die("Ошибка " . mysqli_connect_error());
basketInit();

14

Re: Запит MySQL

mysql_connect
mysqli_connect
Подякували: Betterthanyou, ostap34PHP2

15

Re: Запит MySQL

221VOLT написав:
mysql_connect
mysqli_connect

Спасибі, Велике Спасибі. Бо я замучився. Але помилка не тільки с цьому. Я думаю, що помилка в тому, що запит скорочений. На жаль я не умію робити повний запит.

16

Re: Запит MySQL

Що за "locflhost"?
І наступного разу викладайте повідомлення про помилку або повний дамп бази, з описом усього задіяного софту.

Подякували: 221VOLT, ostap34PHP, leofun01, Betterthanyou4

17

Re: Запит MySQL

нагадали про "Внн пох і птчк"))))

18 Востаннє редагувалося elektryk (04.02.2018 21:54:00)

Re: Запит MySQL

Torbins написав:

Що за "locflhost"?
І наступного разу викладайте повідомлення про помилку або повний дамп бази, з описом усього задіяного софту.

Щоб я без Вас робив?? Звісно що не "locflhost", а "locаlhost". У мене вже очі замилені. Я б ніколи в житті не додивився!! Чому не можна зробити таку розкладку,  щоб латинські літери співпадали з нашими, де це можливо.

А зараз ця тварюка видала помилку таку Warning: mysqli_connect() [function.mysqli-connect]: (42000/1049): Unknown database 'orders.log' in C:\OpenServer\domains\localhost\mysite2.local\eshop\inc\db.inc.php on line 10
Ошибка Unknown database 'orders.log'

Але база даних eshop створена і в ній є таблиця 'orders.log'. Що йому ще потрібно??

19

Re: Запит MySQL

Замість 'orders.log' напишіть 'eshop'

Четвертий параметр не таблиця а база даних (назва бази даних), і взагалі цей параметр не є обов'язковим

dbname
If provided will specify the default database to be used when performing queries.

переклад

dbname
Якщо надано, буде вказано базу даних за замовчуванням, яка буде використовуватися під час виконання запитів.

Подякували: 221VOLT1

20

Re: Запит MySQL

elektryk написав:

Спасибі, Велике Спасибі. Бо я замучився.

є така кнопочка під повідомленням - "дякую"
можна її клапцуни один раз, замість чепятати довге "велике спасибі"  :D