use_linux

Рейтинг
68
Регистрация
04.08.2013

adm.unix, 4.4.12.

Синтаксис подправил, ошибка исчезла, моя ошибка. Но все равно не работает. Не реагирует ни на какие ошибки, просто выполняет программу (при правильном вводе). Если убрать все перед &&, то на пустую строку проверят нормально.

Ваш код поместил в цикл:

#!/bin/bash

re='^[0-9]+$'

echo "ввести первое значение"

read var1

while [ -z $var1 ] && [[ $var1 =~ $re ]]; do

echo "error: Not a number" >&2; exit 1

read var1

done

adm.unix, я попробовал, в итоге примерно та же ошибка что и у меня: !-z: ожидается унарный оператор. Что ему нужно не очень понятно. Хотя проверка просто на пустую строку работает идеально. После && начинаются проблемы.

EvGenius, я яндексом пользовался :D

---------- Добавлено 02.07.2019 в 17:14 ----------

lealhost, как есть набирал. М.б. в этом дело, я в поисковой оптимизации не разбираюсь, поэтому не знал этого.

WebAlt, это да, только имя бд и т.д. где бы посмотреть?

SELECT a.id, a.name
FROM author a
JOIN (
SELECT author_id
FROM author_article
GROUP BY author_id
HAVING COUNT(*) > 2
) t ON a.id = t.author_id;

На что указывают эти сокращения a.id, a.name, author a, t ON a.id, буква ''t''?

LazyBadger:
Так-то он так. Но вот только в данном конкретном случае где в "автор-документ" (документ - не просто "документ", а пост на сайте) many-2-many? У 99% CMS автор - 1 шт.

Для моих целей нужно учитывать, что у статей может быть несколько авторов.

LEOnidUKG:
Пробовали запускать когда таблица весит по 2 ГБ и записей более 1 млн? :)

imaster-php в данном случае прав, для моих целей сойдет, я рассчитываю на не более 2-3 тыс. А потом видно будет.

Я бы с интересов взглянул на ваше предложение.

---------- Добавлено 07.05.2019 в 20:17 ----------

imaster-php:
Можно было бы сразу в таблице статей указывать ID автора.
Но раз уж так спроектировали БД, то для выборки можете использовать запрос
SELECT * FROM `Authors` WHERE `id` IN (SELECT `AuthorId` FROM `ArticleAuthors` GROUP BY `AuthorId` HAVING COUNT(ArticleId) >= 5

Ваш код приспособил, работает пока. Хотя, я бы хотел чуть иначе. На самом деле, если таблица будет большая - будет накладно.

---------- Добавлено 07.05.2019 в 20:19 ----------

LEOnidUKG:
Изучайте JOIN LEFT, чтобы разные таблицы собирать в одну.

то-то и оно! прокачаться надо в sql. Простые запросы я научился составлять, а как доходит до чего-нить подобного...

jkm, а ну да) бг

Дикий пионер:
Как минимум метод query() не вызвали - запрос-то у вас в базу не ушёл, судя по коду.

Это я исправил, но так или иначе все равно та же ошибка(

---------- Добавлено 22.04.2019 в 16:05 ----------

jkm:
Ну так всё верно тебе говорит нет PDO::fetch(), есть PDOStatement::fetch().
https://www.php.net/manual/ru/book.pdo.php

омг я уже его наизусть почти выучил. Я вот подумал, что проще наследоваться от класса pdo.

Кстати, я уже путать начал: директива use только трейты включает или классы тоже можно?

<?php

class dbr {

private $db;

public function init () {

try {
$this->db = new PDO('mysql:host=localhost;dbname=magic', "root", "");
}

catch (PDOException $e)
{
die('<h3 style="color: blue">Ошибка соединения с БД. Повторите попытку через полминуты</h3>');
}
}

public function query($sql) {

return $this->db->query($sql);

}

public function getobj($sql) {

return $this->db->fetch(PDO:: FETCH_OBJ);

}
function __destruct() {

$this->db = null;
}
}

$a = new dbr;
$a->init();
$a->getobj('SELECT * FROM articles ORDER BY date DESC');
?>

Подскажите в чем ошибка? пхп выдает ошибку на 27 строке "вызов неопределенного метода PDO::fetch()". Единственное непонятно: до этого подключался через pdo 100+ раз без проблем, а на этот раз решил вые@нуться и написал класс, в котором все то же, что и обычно, только не рабочий оказался(

Всего: 79