Показать несколько строк в MySQL - PullRequest
1 голос
/ 02 апреля 2012

У меня была такая таблица

id   |   name 
------------------
1    |   SAM1
2    |   SAM2
1    |   SAM1
3    |   SAM3
7    |   SAM7
6    |   SAM6

Мне нужно показать результаты с помощью этого запроса

SELECT name,id FROM tblnameWHERE id IN (1,2,7,6,1)

и получить следующий результат

id   |   name 
------------------
1    |   SAM1
2    |   SAM2
7    |   SAM7
6    |   SAM6

Моя проблема заключается в том, что пропустил последний идентификатор, то есть 1.Мне нужно что-то вроде этого

id   |   name 
------------------
1    |   SAM1
2    |   SAM2
7    |   SAM7
6    |   SAM6
1    |   SAM1

Без использования цикла запроса (как следует) любой другой метод для этого?

$ids=array(1,2,7,6,1);
$i=0;
foreach($ids as $id){

$sql=mysql_query("SELECT * FROM tblname WHERE id=$id");
// Store value to array 

}

Пожалуйста, помогите

Ответы [ 6 ]

2 голосов
/ 02 апреля 2012

Запрос

SELECT name,id FROM tblname WHERE id IN (1,2,7,6);

должно показывать повторяющиеся строки; например если в таблице есть действительно двух разных строк с одинаковым идентификатором, то запрос покажет их (так как нет ключевого слова DISTINCT).

Вместо этого, если вы хотите создать повторяющиеся строки, начиная с таблицы, содержащей одиночные строки, вы должны объединить свою таблицу с таблицей, в которой повторяется 1 (в вашем случае); другой способ - использовать union следующим образом:

SELECT  name, id FROM tblname WHERE id IN (1,2,7,6)
  UNION ALL
SELECT name, id FROM tblname WHERE id = 1;

Редактировать

Поскольку ваш идентификатор является первичным ключом, он будет уникальным, отсюда и «проблема», с которой вы столкнулись. Если вы хотите разрешить дублирование строк при вставке, удалите первичный ключ. Если вам это нужно, рассмотрите возможные решения, предложенные выше.

1 голос
/ 02 апреля 2012

Вы попробуете это без изменений в таблице

SELECT name,id FROM tblname WHERE id IN (1,2,7,6,1) GROUP BY id
1 голос
/ 02 апреля 2012

Как вы говорите, id является первичным ключом Вы не можете вставить повторяющиеся записи для этого поля следовательно, вторая вставка с идентификатором 1 могла завершиться ошибкой

SELECT name,id FROM tblname

не будет отображаться вторая запись с идентификатором 1

потому что первичный ключ должен быть уникальным.

Так что вы получаете то, что у вас есть в базе данных.

1 голос
/ 02 апреля 2012

попробуй объединить все

(SELECT name,id FROM tblname WHERE id IN (1,2,7,6)) UNION ALL (SELECT name,id FROM tblname WHERE id IN (1))
1 голос
/ 02 апреля 2012

То, что вы пытаетесь сделать, неверно.

Оба поля имеют одинаковый идентификатор и одинаковое значение.Вы сказали, что id - ваш основной ключ на вашем столе.

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

Вы не должны объявлять поле id в качестве первичного ключа.

  • Удалить нижнюю строку
  • Добавить первичный ключ к полю, выполнить этот запрос

    ALTER TABLE `tablename` ADD PRIMARY KEY(id) AUTO_INCREMENT
    

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

1 голос
/ 02 апреля 2012

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

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