# 1064 - У вас есть ошибка в синтаксисе SQL & hellip; рядом, если [дублировать]

Порядок, в котором указаны взаимозависимые связанные библиотеки, неверен.

Порядок, в котором связаны библиотеки, имеет значение, если библиотеки зависят друг от друга. В общем случае, если библиотека A зависит от библиотеки B, тогда libA ДОЛЖЕН появляться перед libB в флагах компоновщика.

Например:

// B.h
#ifndef B_H
#define B_H

struct B {
    B(int);
    int x;
};

#endif

// B.cpp
#include "B.h"
B::B(int xx) : x(xx) {}

// A.h
#include "B.h"

struct A {
    A(int x);
    B b;
};

// A.cpp
#include "A.h"

A::A(int x) : b(x) {}

// main.cpp
#include "A.h"

int main() {
    A a(5);
    return 0;
};

Создайте библиотеки:

$ g++ -c A.cpp
$ g++ -c B.cpp
$ ar rvs libA.a A.o 
ar: creating libA.a
a - A.o
$ ar rvs libB.a B.o 
ar: creating libB.a
a - B.o

Скомпилируйте:

$ g++ main.cpp -L. -lB -lA
./libA.a(A.o): In function `A::A(int)':
A.cpp:(.text+0x1c): undefined reference to `B::B(int)'
collect2: error: ld returned 1 exit status
$ g++ main.cpp -L. -lA -lB
$ ./a.out

Чтобы повторить снова, порядок имеет значение!

33
задан Eric Leschinski 6 December 2013 в 23:49
поделиться

4 ответа

Для SELECT вы можете использовать конструкцию FOUND_ROWS, описанную здесь ):

SELECT SQL_CALC_FOUND_ROWS something FROM your_table WHERE whatever;
SELECT FOUND_ROWS( ) ;

, которая вернет число строк в последнем запросе SELECT или если первый запрос имеет предложение LIMIT, он возвращает количество строк, которые были бы без LIMIT).

Для UPDATE / DELETE / INSERT это ROW_COUNT конструкция

INSERT INTO your_table VALUES (1,2,3);
SELECT ROW_COUNT();

, которая вернет количество затронутых строк.

51
ответ дан AndiDog 25 August 2018 в 15:40
поделиться
mysql> SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name

    -> WHERE id > 100 LIMIT 10;

mysql> SELECT FOUND_ROWS();

Подробнее об этом здесь

6
ответ дан Lazarus 25 August 2018 в 15:40
поделиться

Существует другой способ:

CREATE TEMPORARY TABLE `results` AS ( *** Your query without LIMIT *** );

Получить количество строк

SELECT COUNT(*) FROM `results`;

Получить подмножество

SELECT * FROM `results` LIMIT 5,10;

Временная таблица существует только в текущей сессии. После этого я все равно буду очищать

DROP TEMPORARY TABLE `results`;
0
ответ дан Rolf 25 August 2018 в 15:40
поделиться

Самый простой способ - использовать переменную:

mysql> SELECT @rowcount:=COUNT(*) FROM my_table;
mysql> SELECT @rowcount;

Или вы можете использовать конструкцию FOUND_ROWS() после размещения SQL_CALC_FOUND_ROWS в инструкции SELECT.

mysql> SELECT SQL_CALC_FOUND_ROWS * FROM my_table;
mysql> SELECT FOUND_ROWS();
2
ответ дан Yada 25 August 2018 в 15:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: