Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php/mysql] Dwa selecty w jednym zapytaniu
M@X
post 3.10.2013, 18:47:58
Post #1





Grupa: Zarejestrowani
Postów: 212
Pomógł: 0
Dołączył: 18.12.2003
Skąd: Warszawa

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


Witam.
Posiadam proste zapytanie:
  1. $query=mysql_query('SELECT * FROM tabela ORDER BY nazwa');
  2. while($row=mysql_fetch_array($query))
  3. {
  4. echo '
  5. <tr>
  6. <td>'.$row['nazwa'].'</td>
  7. <td>'.$row['data'].'</td>
  8. </tr>';
  9. }

Listuje ono dwie kolumny: nazwy i daty (data w bazie format datetime)

Chicałem dodać jeszcze jedną kolumne w której znajdzie się jakiś napis, jeśli datetime + 45 minut będzie większy niż NOW().
Tzn: jakaś nazwa ma swój datetime: powiedzmy 2013-10-03 20:00:00 to żeby napis pojawiał się, jeśli faktyczna godzina będzie powyżej 2013-10-03 20:45:00

Na samej zmiennej $row['data'] + INTERVAL 45 MIN >= NOW() tego raczej nie wykonam...
Wydaje mi się że to musi być jeszcze w zapytaniu, ale nie moge do tego SELECTA dodać bo zwykły $row['data'] nie będzie się wyświetlał.
LEFT JOIN i UNION też chyba odpadają bo nie ma dwóch tabel.

Ma ktoś jakiś pomysł jak to logicznie rozwiązać ?

Ten post edytował M@X 3.10.2013, 19:11:29


--------------------
"timeo danaos at dona ferentes"
Go to the top of the page
+Quote Post
timon27
post 4.10.2013, 08:16:09
Post #2





Grupa: Zarejestrowani
Postów: 578
Pomógł: 69
Dołączył: 15.04.2007
Skąd: Wrocław

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


Cytat(M@X @ 3.10.2013, 19:47:58 ) *
Na samej zmiennej $row['data'] + INTERVAL 45 MIN >= NOW() tego raczej nie wykonam...


Czemu nie?
Tylko na samym mysql, bo po co php



  1. SELECT * FROM tabela WHERE ADDTIME(DATA, '0 0:45')>NOW() ORDER BY nazwa


//edit:
"data" powinno być małymi literami, nie wiem czemu forum zmienia mi na duże

Ten post edytował timon27 4.10.2013, 08:17:48
Go to the top of the page
+Quote Post
M@X
post 4.10.2013, 08:58:16
Post #3





Grupa: Zarejestrowani
Postów: 212
Pomógł: 0
Dołączył: 18.12.2003
Skąd: Warszawa

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


Tak nie moze byc bo wtedy wyswietli tylko te wyniki ktore spelniaja warunek WHERE a musza byc wyswietlane wszystkie rekordy tylko jedna zmienna ma wyciagac date po zmiane.


--------------------
"timeo danaos at dona ferentes"
Go to the top of the page
+Quote Post
freemp3
post 4.10.2013, 09:11:15
Post #4





Grupa: Zarejestrowani
Postów: 467
Pomógł: 77
Dołączył: 6.09.2008
Skąd: Miechów / Kraków

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


Wystarczy użyć instrukcji warunkowych:
Kod
SELECT *, IF(date + INTERVAL 45 MINUTE >= NOW() , 1, 0) as pole FROM tabela ORDER BY nazwa

Jeśli wyrażenie jest prawdziwe zostanie zwrócona liczba 1, w przeciwnym wypadku 0.

Ten post edytował freemp3 4.10.2013, 09:12:19


--------------------
Niemożliwym jest stworzenie czegokolwiek idiotoodpornego, ponieważ idioci są wyjątkowo pomysłowi.

https://www.aroch.pl
https://themeforest.net/user/aroch
https://www.astroblog.aroch.pl
https://www.4geeks.pl
Go to the top of the page
+Quote Post
b4rt3kk
post 4.10.2013, 14:23:43
Post #5





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

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


Kwestia jest prosta:

  1. SELECT *, CASE WHEN DATA + INTERVAL 45 MINUTE > NOW() THEN 'jakis teksts' ELSE 'inny tekst' END AS dodatkowa_kolumna::text FROM tabela ORDER BY nazwa


--------------------
Jeśli pomogłem, kliknij proszę 'pomógł'. Dzięki.
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 11:15