нужна помощь

1. ZipeR (25.04.2018 / 18:29)
Имеется масив, состоящий их строковых данных

допустим:
$arr[0]='hello'; $arr[1]='world';
Требуется вывести из таблицы бд mysql все записи, определённая ячейка которых соответствует одному из элементов массива:
mysql_query("SELECT title FROM $table WHERE value=*Одному из значений*$arr[]");
Далее сложнее.
Для ячеек, в которых value равен последнему элементу массива, надо вернуть не только title, но и, допустим, descrition (одну или несколько дополнительный ячеек). На примере выше, для всех строк со значением value='world' требуется вернуть не только title, но и description.
Далее ещё сложнее.

Допустим, каждая запись имеет свой уникальный id и значение родителя (его id), что бы иметь возможность обратиться к нему. Можно ли выводить исключительно те записи из БД, в которых не только значение value соответствует значению элемента массива, но и значение value родителя соответствует значению предыдущего элемента массива.
Возможно ли такое вообще в mysql? Заранее спасибо.

2. Андрей (25.04.2018 / 19:22)
чот какой то быдлокод

3. neuberon (12.06.2020 / 22:38)
Ты пытаешься решить одним запросом разные задачи.
Тебе нужно не брать значение одного столбца, а брать всю строчку. И пихать её в массив. И дальше уже логику от значений массива писать. 2м запросом так же дергай родителя. Ты же когда пытаешься выполнить запрос и найти строку не знаешь же id строки которая найдется (а может быть и не одной строки), бд то откуда такие вещи предугадывать?

4. Вантуз-мен (13.06.2020 / 14:33)
ZipeR, все правильно написал neuberon, делай выборку всех полей на mysql, а потом уже решай на php какие поля выводить

вообще если я правильно понял можно все это сделать 1 запросом, типа WHERE IN и left join

5. erasier (13.06.2020 / 22:18)
Как быстро идёт разработкаsmile

6. vikamass (13.11.2023 / 04:36)
Доброе, подскажите у меня имеются записи которые нужно быстро нужно построить по 1,2,3,4,5,6 по порядке в order., помогите плизsmile

7. Вантуз-мен (13.11.2023 / 13:45)
vikamass, а что у тебя за записи, массив, коллекция или данные в бд?

8. vikamass (13.11.2023 / 18:53)
Анкеты пользователей ., создала таблицу order, но вручную замучаюсь ввозить 1,2,3,4,5 «...» нужно чтобы вписать и автоматически заставился порядок.

9. Вантуз-мен (14.11.2023 / 12:16)
vikamass, создай поле к примеру sort и заполни его текущим id
UPDATE table SET sort = id;

ну и в запросе вывода данных сортируй
select * from table order by sort (asc|desc)


10. vikamass (14.11.2023 / 12:55)
Ты меня не по я создала таблицу order она пустая, мне нужно чтобы в эту таблицу занеслись цифры по возрастанию 1,2,3,4,5 ....

11. Вантуз-мен (14.11.2023 / 13:47)
vikamass, ну так создай автоинкрементное поле, если таблица есть переделай или удали и создай заново
https://dev.mysql.com/doc/refman/8.0/en/example-auto-increment.html

12. vikamass (14.11.2023 / 14:34)
Очень сложноsmile напиши лучше пример тут

13. Вантуз-мен (14.11.2023 / 14:55)
vikamass, переходила по ссылке там есть пример

CREATE TABLE animals (
     id MEDIUMINT NOT NULL AUTO_INCREMENT,
     name CHAR(30) NOT NULL,
     PRIMARY KEY (id)
);

INSERT INTO animals (name) VALUES
    ('dog'),('cat'),('penguin'),
    ('lax'),('whale'),('ostrich');

SELECT * FROM animals order by id;


14. vikamass (15.11.2023 / 04:02)
Ты меня не понял вот смотри у меня имеются 2000 записей., где я создала таблицу order и чтобы вручную вводить цифры по возрастанию 1,2,3,4,5 ... Мне нужно упрастить.
То , что ты показал пример он не подходит ко мне

15. Александр (15.11.2023 / 06:09)
Приведенный ниже код создаст запросы для изменения каждой колонки в таблице:
SELECT CONCAT('ALTER TABLE your_table_name MODIFY COLUMN ', COLUMN_NAME, ' INT AUTO_INCREMENT PRIMARY KEY;')
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'your_table_name';
Замени your_table_name на реальное имя таблицы. Этот запрос создаст список команд ALTER TABLE, которые вы можете выполнить, чтобы добавить AUTO_INCREMENT ко всем существующим колонкам.
Если я правильно понял.
P.s GPT

16. Вантуз-мен (15.11.2023 / 12:08)
Ты меня не по я создала таблицу order она пустая, мне нужно чтобы в эту таблицу занеслись цифры по возрастанию 1,2,3,4,5 ....
@vikamass Вчера / 12:55

Сперва ты написала, что у тебя таблица пустая
Если уже есть записи, то сделай как посоветовал Александр

17. vikamass (15.11.2023 / 21:50)
Вантуз-мен, я не сильна в терминахsmile

Добавлено через 07:22 сек.
Александр, спасибо но я не умею это вставлять, очень трудно для меня., на скрине покажу наглядно

18. Вантуз-мен (15.11.2023 / 23:57)
vikamass,
UPDATE worksheet SET list = id;
это всем твоим записям присвоит такой же номер как id
а потом уже можешь изменить порядок какой тебе надо

А для новых записей зависит через что ты добавляешь их
можно создать триггер
CREATE TRIGGER new_trigger
  AFTER INSERT
  ON worksheet ... итд

или делать вставки через orm что-то типа
INSERT INTO worksheet( list, ...)
VALUES ((SELECT MAX( list )+1 FROM  worksheet) , ...)
но это менее надежно

ну или заполняй вручную при вставке

19. vikamass (16.11.2023 / 23:33)
А можно сделать так, чтобы постоянно менялось расположениеsmile

20. Роман Лабойко (20.11.2023 / 09:44)
ZipeR,
Для решения вашей задачи вы можете использовать запросы SQL с использованием операторов IN и JOIN. Давайте рассмотрим каждый этап вашего запроса.

Выборка записей, где значение value соответствует одному из элементов массива:
$values = implode("','", $arr);
$query = "SELECT title FROM $table WHERE value IN ('$values')";
// Выполнение запроса и обработка результатов
Здесь мы используем функцию implode для объединения элементов массива в строку и подставляем их в оператор IN запроса.

Вывод данных, когда значение value равно последнему элементу массива, включая дополнительные поля:
$lastValue = end($arr); // Получаем последний элемент массива
$query = "SELECT title, description FROM $table WHERE value = '$lastValue'";
// Выполнение запроса и обработка результатов
Здесь мы используем функцию end для получения последнего элемента массива и включаем соответствующие поля в запросе.

Вывод данных, когда значение value и значение родителя соответствуют значениям предыдущего элемента массива:

Для этого вам нужно использовать оператор JOIN для объединения таблицы с самой собой (self-join). Предположим, у вас есть поле parent_id, которое указывает на родительский элемент:
$previousValue = null;
foreach ($arr as $value) {
    $query = "SELECT t1.title, t1.description FROM $table t1
              JOIN $table t2 ON t1.parent_id = t2.id
              WHERE t1.value = '$value' AND t2.value = '$previousValue'";
    // Выполнение запроса и обработка результатов
    $previousValue = $value;
}
Здесь мы используем JOIN для объединения таблицы с самой собой по условию, что parent_id равен id предыдущей записи, и фильтруем по значениям из массива.

21. vikamass (21.11.2023 / 22:37)
Вантуз-мен, ни чего у меня не получается, пойдём с другой стороны к примеру интернет магазине постоянно меняется расположение товаров, как этого добитьсяsmile

22. Вантуз-мен (21.11.2023 / 22:52)
В твоём случае решить проблему можно просто добавив order by id к запросу

23. vikamass (22.11.2023 / 00:38)
Вантуз-мен, я не вижу как разнаброс

24. Вантуз-мен (22.11.2023 / 00:48)
Что это? О чем ты, что такое разноброс?

25. vikamass (22.11.2023 / 01:16)
Порядок постоянно меняется id

26. Александр (22.11.2023 / 04:09)
Вы можете использовать функцию ORDER BY RAND() в запросе SELECT, чтобы получить результаты в случайном порядке при каждом обновлении страницы.

Пример запроса:
SELECT * FROM table_name ORDER BY RAND();

Этот запрос выбирает все строки из таблицы "table_name" и сортирует результаты в случайном порядке. При каждом обновлении страницы вы получите разные результаты.
P.s GPT

27. vikamass (22.11.2023 / 13:06)
Александр, спасибо получилось, но когда пытаюсь добавить, не работает.

28. Вантуз-мен (22.11.2023 / 13:40)
vikamass, у меня такое ощущение, что ты постоянно рофлишь
Если перечитать твои сообщения, то ты сперва писала, что тебе нужно упорядочить, а в итоге наоборот

29. vikamass (22.11.2023 / 15:10)
Вантуз-мен, ЕЩЁ РАЗ ГОВОРЮ!!!! МНЕ НАДО ЧТОБЫ БЫЛО ПОЛОЖЕНИЕ ПОРЯДКА МЕНЯЛСЯ ПОСЛЕ ОБНОВЛЕНИЯ!!!!!!!!

30. Александр (22.11.2023 / 20:19)
vikamass, Ошибка в SQL-запросе: выражение ORDER BY RAND() AND published='available' AND top='available' AND secure='yes' DESC некорректно сформулировано. Вы используете AND внутри ORDER BY, что не допустимо. Допустимо использовать ORDER BY с атрибутами сортировки, но в вашем случае они должны быть частью WHERE или HAVING предложения.

Добавлено через 06:14 сек.
$e1 = "SELECT * FROM questionnaires WHERE published='available' AND top='available' AND secure='yes' ORDER BY RAND() DESC";
$e2 = mysql_query($e1);
while ($e3 = mysql_fetch_array($e2)) {
    echo $e3['id'] . "<br>";
}

Изменились следующие вещи:
1) Перемещены условия (published='available', top='available', secure='yes') в блок WHERE запроса, чтобы фильтровать результаты.
2) Изменён порядок элементов в запросе: сначала фильтры, затем ORDER BY RAND() DESC для случайной сортировки.
3) Используется $e3['id'] вместо "$e3[id]" для обращения к столбцу id.

P.s GPT

31. vikamass (22.11.2023 / 20:55)
Я нашла рабочий вариант для меня, типо такое
SELECT * FROM (SELECT * FROM users ORDER BY rand() LIMIT 20) T1 ORDER BY name

Мне нужно ORDER BY там можно сортировку настроить как я хотелаsmile пепец 4 дня понадобилось, чтобы найти

URL: https://visavi.net/topics/43971