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, 348 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