PHP сделать что-то для каждой записи в базе данных - PullRequest
2 голосов
/ 25 октября 2010

У меня есть две таблицы в базе данных (видео и viewData).

Я пытаюсь создать сценарий, который выполняется для каждой записи в таблице "videos" и что-то делает, используя поле "videoID" для этой конкретной записи в таблице "videos". Часть делает что-то будет выводить некоторые данные в таблицу viewData.

Нужно ли хранить все записи в массиве перед вызовом цикла? Пример такого цикла был бы действительно полезен. Также таким способом, который может быть потенциально масштабируемым, что не повредит серверу, если в таблице "videos" будет более 1000 записей.

Спасибо, Dave

Ответы [ 3 ]

1 голос
/ 25 октября 2010

Старайтесь избегать петли любой ценой.Обдумайте набор на основе обработки, что означает обработку всего набора строк в одной команде SQL.

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

Вы можете выполнить JOIN в ОБНОВЛЕНИИ, по сути выбирая из родительской таблицы и ОБНОВЛЯЯ дочернюю таблицу для всех строкодиночная команда UPDATE.

UPDATE c
    SET Col1=p.Col1
    FROM ParentTable           p
        INNER JOIN ChildTable  c On p.ParentID=c.ParentID
    WHERE ...

Вы также можете вставлять на основе SELECT, поэтому вы можете создать одну строку из каждой строки, возвращаемой в SELECT, например:

INSERT INTO ChildTable
        (Col1, Col2, Col3, Col4)
    SELECT
        p.ColA, p.ColB, 'constant value', p.ColC-p.ColD
        FROM ParentTable p
        WHERE... 
0 голосов
/ 25 октября 2010

Есть ли у вас доступ к таблицам MyQSL другими способами? Как с MySQL Administrator или другим инструментом, даже из командной строки?

Это потому, что было бы гораздо больше времени, ресурсов и всего остального, экономя, делая это непосредственно в базе данных, через запрос или функцию базы данных.

Я бы так и сделал.

Но для ясности, если вы сами не храните видео в таблицах базы данных, 1000 записей не проблема. Может быть, 10.000 будет.

Общий совет: делайте только то, что вам нужно.

Если вам просто нужно оперировать данными, делайте это в базе данных. Если вам нужно просто проверить одно поле в одной таблице, SELECT your_field FROM your_table вместо SELECT * FROM your_table .

0 голосов
/ 25 октября 2010

Работа с базой данных в цикле не является хорошей практикой.Можно выбрать все данные таблицы в массив одним запросом и работать с этим массивом в будущем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...