Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> SELECT ....... IN() sortowanie po mojemu, Jak posortować wyniki po mojemu a nie rosnąco?
adamantd
post
Post #1





Grupa: Zarejestrowani
Postów: 228
Pomógł: 7
Dołączył: 15.08.2012
Skąd: Rzeszów

Ostrzeżenie: (0%)
-----


Witam! Nie mogę znaleźć nigdzie.. Proste zapytanie do bazy np:

  1. SELECT * FROM tabela WHERE id IN(67, 54, 95, 23, 56, 15, 2)


wyświetli rekordy w kolejności : 2, 15, 23, 54, 56, 67, 95

a ja chcę dokładnie tak jak wrzuciłem do IN(xxx).
testowałem i do nawiasu na pewno są wrzucane id w takiej kolejności jak ja chcę a wyświetla się w kolejności rosnącej

jak sprawić żeby było po mojemu?

z góry dzięki
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
adamantd
post
Post #2





Grupa: Zarejestrowani
Postów: 228
Pomógł: 7
Dołączył: 15.08.2012
Skąd: Rzeszów

Ostrzeżenie: (0%)
-----


Crozin pomogło po Twojemu ale teraz zapytanie wygląda tak:

  1.  
  2.  
  3. $id = '67, 54, 95, 23, 56, 15, 2';
  4.  
  5. SELECT * FROM tabela WHERE id IN({$id}) ORDER BY FIELD(id, {$id})
  6.  


wtedy wszystko działa i sortowanie jest po mojemu tyle, że jeśli będę miał np do wyświetlenia 200 rekordów to mogę skorzystać z takiego sposobu? Wtedy zapytanie jest bardzo długie, ponieważ muszę 2 razy użyć zmiennej $id

edit:

mam jeszcze jedno pytanie:
przykład:
  1.  
  2. $id = '67, 54, 95, 23';
  3.  
  4. $resInfo = db->query("SELECT id, nick FROM tabela WHERE id IN({$id}) ORDER BY FIELD(id, {$id})");
  5.  
  6. echo '<pre>';
  7. print_r($resInfo);
  8. echo '</pre>';
  9.  
  10.  
  11. (
  12. [0] => Array
  13. (
  14. [id] => 67
  15. [nick] => przyklad1
  16. )
  17.  
  18. [1] => Array
  19. (
  20. [id] => 54
  21. [nick] => przyklad2
  22. )
  23.  
  24. [2] => Array
  25. (
  26. [id] => 95
  27. [nick] => przyklad3
  28. )
  29.  
  30. [3] => Array
  31. (
  32. [id] => 23
  33. [nick] => przyklad4
  34. )
  35.  
  36. )
  37.  
  38.  



Pytanie brzmi -jak wypełnić pustą wartością jeżeli rekord nie zostanie odnaleziony w tabeli ponieważ go tam już nie ma?
Załóżmy, że nie ma w tabeli usera o id 95, wtedy rezultat tego zapytania będzie wyglądał następująco:

  1.  
  2. (
  3. [0] => Array
  4. (
  5. [id] => 67
  6. [nick] => przyklad1
  7. )
  8.  
  9. [1] => Array
  10. (
  11. [id] => 54
  12. [nick] => przyklad2
  13. )
  14.  
  15. [2] => Array
  16. (
  17. [id] => 23
  18. [nick] => przyklad4
  19. )
  20.  
  21.  
  22. )
  23.  


Ja jednak potrzebuję, żeby wyglądało to mniej więcej tak:

  1.  
  2. (
  3. [0] => Array
  4. (
  5. [id] => 67
  6. [nick] => przyklad1
  7. )
  8.  
  9. [1] => Array
  10. (
  11. [id] => 54
  12. [nick] => przyklad2
  13. )
  14.  
  15. [2] => Array
  16. (
  17. [id] => 0
  18. [nick] => 0
  19. )
  20.  
  21. [3] => Array
  22. (
  23. [id] => 23
  24. [nick] => przyklad4
  25. )
  26.  
  27. )
  28.  
  29.  


Czy jest to możliwe?

Nie wiem czy dobrze to opisałem, chciałbym po prostu podczas zapytania gdzie wykorzystuję IN() wyświetlić również rekordy które nie istnieją, czyli w momencie jeżeli nie znalazł rekordu o id jednym z tych w nawiasie IN(xx, xx, xx, xx) to żeby wyświetlił również w tablicy tylko jako pole puste lub '0'.

Czy da się to zrobić za pomocą jakiegoś tajemniczego sposobu już na poziomie zapytania do bazy czy trzeba kombinować z pętlami?

Ten post edytował adamantd 18.02.2013, 17:17:25
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 6.10.2025 - 08:11