#1 2015.10.04 21:59

tipsun
Moderator
Зарегистрирован: 2009.10.14
Сообщений: 2291
Карма: 19
Профиль

Общие вопросы по SQL

Общие вопросы по SQL.

Неактивен

#2 2015.10.04 22:01

tipsun
Moderator
Зарегистрирован: 2009.10.14
Сообщений: 2291
Карма: 19
Профиль

Re: Общие вопросы по SQL

Как сделать так, чтобы одинаковые поля в разных таблицах не отображались 2-N раз(а) в результате?

Неактивен

#3 2015.10.04 23:54

tipsun
Moderator
Зарегистрирован: 2009.10.14
Сообщений: 2291
Карма: 19
Профиль

Re: Общие вопросы по SQL

Вроде получилось:

Код:

1
2
3
SELECT * FROM `table1`
LEFT JOIN `table2` USING(`common_field`)
LIMIT 1

Неактивен

#4 2015.10.05 10:08

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6586
Карма: 108
Профиль Веб-сайт

Re: Общие вопросы по SQL

SELECT `table1`.*

Неактивен

#5 2015.10.06 14:32

tipsun
Moderator
Зарегистрирован: 2009.10.14
Сообщений: 2291
Карма: 19
Профиль

Re: Общие вопросы по SQL

Стоит ли использовать внешние ключи (foreign keys?), связывать таблицы?

Неактивен

#6 2015.10.06 15:19

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6586
Карма: 108
Профиль Веб-сайт

Re: Общие вопросы по SQL

да. без вариантов.

Неактивен

#7 2015.10.07 01:51

tipsun
Moderator
Зарегистрирован: 2009.10.14
Сообщений: 2291
Карма: 19
Профиль

Re: Общие вопросы по SQL

А если одна таблица | id | parent_id | ?
В ней тоже parent_id указать как foreign_key? Я где-то видел, что это уже..

Неактивен

#8 2015.10.07 10:33

tipsun
Moderator
Зарегистрирован: 2009.10.14
Сообщений: 2291
Карма: 19
Профиль

Re: Общие вопросы по SQL

Неактивен

#9 2015.10.07 10:46

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6586
Карма: 108
Профиль Веб-сайт

Re: Общие вопросы по SQL

да, если 1 таблица тоже.

Неактивен

#10 2015.10.19 17:25

TLENS
Moderator
Откуда: Украина
Зарегистрирован: 2009.04.05
Сообщений: 2405
Карма: 14
Профиль

Re: Общие вопросы по SQL

есть база сообщений в ней таблицы user_id, from_id, timestamp, message
Как мне вывести список получателей(from_id) нужного юзера и сортировать это по последнему сообщению
Пробовал так но результат что то не тот что ожидалось "SELECT * FROM `messages` WHERE `user_id`=$uid GROUP BY `from_id` ORDER BY `timestamp` DESC"

Неактивен

#11 2015.10.19 18:12

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6586
Карма: 108
Профиль Веб-сайт

Re: Общие вопросы по SQL

что не так с результатом-то?

Неактивен

#12 2015.10.19 18:22

TLENS
Moderator
Откуда: Украина
Зарегистрирован: 2009.04.05
Сообщений: 2405
Карма: 14
Профиль

Re: Общие вопросы по SQL

Gemorroj написал:

что не так с результатом-то?

Да совсем не так. Вот нашел решение уже SELECT *, max(timestamp) maxtime FROM `messages` WHERE `user_id`=$uid GROUP BY `from_id` ORDER BY `maxtime` DESC

Неактивен

#13 2015.11.02 16:24

TLENS
Moderator
Откуда: Украина
Зарегистрирован: 2009.04.05
Сообщений: 2405
Карма: 14
Профиль

Re: Общие вопросы по SQL

Как добавить множество записей с использованием ON DUPLICATE KEY UPDATE

Неактивен

#14 2015.11.03 07:35

TLENS
Moderator
Откуда: Украина
Зарегистрирован: 2009.04.05
Сообщений: 2405
Карма: 14
Профиль

Re: Общие вопросы по SQL

TLENS написал:

Как добавить множество записей с использованием ON DUPLICATE KEY UPDATE

С этим разобрался

Код:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
        foreach ($arrayData as $data) {
            $id $data['id'];
            $title $this->_mysqli->real_escape_string($data['title']);
            $description $this->_mysqli->real_escape_string($data['description']);
            $duration $data['duration'];
            $img $data['img'];
            $errno = (int)$data['errno'];
            $data $this->_mysqli->real_escape_string(serialize($data['data']));
            
            $values[] = "('$id', '$title', '$description', $duration, '$img', $errno{$_SERVER['REQUEST_TIME']}, '$data')";
            
            
        }
        $insert .= 'VALUES 'implode (",\n"$values) . "\n"
                "ON DUPLICATE KEY UPDATE\n"
                "`title` = VALUES(`title`),\n"
                "`description` = VALUES(`description`),\n"
                "`img` = VALUES(`img`),\n"
                "`errno` = VALUES(`errno`),\n"
                "`expire` = VALUES(`expire`),\n"
                "`data`= VALUES(`data`)\n";
        $result $this->_mysqli->query($insert);

Но теперь другая проблема. Допустим если при обновлении в одного из записей values пустое поле `data` то как мне оставить старое значение а не обновлять поле в null?

Неактивен

#15 2015.11.03 08:32

TLENS
Moderator
Откуда: Украина
Зарегистрирован: 2009.04.05
Сообщений: 2405
Карма: 14
Профиль

Re: Общие вопросы по SQL

Разобрался по моему все работает как надо

Код:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?php
       $insert "INSERT INTO `$this->_INFO_TABLE_NAME` "
                "(`id`, `title`, `description`, `duration`, `img`, `errno`, `expire`, `data`)\n";
        $values = [];
        foreach ($arrayData as $data) {
            
            $id "'{$data['id']}'";
            $title "'" .$this->_mysqli->real_escape_string($data['title']) . "'";
            $description "'" $this->_mysqli->real_escape_string($data['description']) . "'";
            $duration $data['duration'];
            $img "'" $data['img'] . "'";
            $errno = (int)$data['errno'];
            $otherData $data['data']
                    ? "'".$this->_mysqli->real_escape_string(serialize($data['data']))."'"
                    "''";
            
            
            $values[] = "($id$title$description$duration$img$errno{$_SERVER['REQUEST_TIME']}$otherData)";
            
            
        }
        $insert .= 'VALUES 'implode (",\n"$values) . "\n"
                "ON DUPLICATE KEY UPDATE\n"
                "`title` = COALESCE(NULLIF(title, ''), VALUES(title)),\n"
                "`description` = COALESCE(NULLIF(description, ''), VALUES(description)),\n"
                "`img` = COALESCE(NULLIF(img, ''), VALUES(img)),\n"
                "`errno` = VALUES(errno),\n"
                "`expire` = VALUES(expire),\n"
                "`data`= COALESCE(NULLIF(data, ''), VALUES(data))\n";
        $result $this->_mysqli->query($insert);
        var_dump($result);
        var_dump($this->_mysqli->error);
        echo $insert;

Неактивен

Дополнительно

forum.wapinet.ru

PunBB Mod v0.6.1
0.013 s